Как проверить, содержит ли строка подстроку в JavaScript?
Самый современный способ: метод includes()
Начиная с ECMAScript 2015 (ES6) в JavaScript появился метод String.prototype.includes(). Это самый простой и читаемый способ проверить, содержит ли строка подстроку. Метод возвращает true или false.
let email = "ivan.petrov@gmail.com";
let hasAtSymbol = email.includes("@");
console.log(hasAtSymbol); // true
let message = "Hello, world!";
console.log(message.includes("world")); // true
console.log(message.includes("World")); // false (регистрозависимо)
console.log(message.includes("foo")); // false
Важно: метод includes() чувствителен к регистру. Если вам нужно игнорировать регистр, приведите обе строки к одному регистру:
let text = "JavaScript is awesome";
let search = "javascript";
console.log(text.toLowerCase().includes(search.toLowerCase())); // true
Классический способ: метод indexOf()
До появления includes() чаще всего использовали indexOf(). Этот метод возвращает индекс первого вхождения подстроки или -1, если подстрока не найдена.
let str = "Hello, world!";
let index = str.indexOf("world");
console.log(index); // 7 (индекс первого символа подстроки)
if (str.indexOf("world") !== -1) {
console.log("Подстрока найдена!");
} else {
console.log("Подстрока не найдена.");
}
Метод indexOf() также может принимать второй параметр — позицию, с которой начинать поиск:
let text = "apple, banana, apple";
console.log(text.indexOf("apple", 1)); // 15 (второе вхождение)
Другие методы
- search() — работает как indexOf(), но принимает регулярное выражение:
let text = "Hello123";
console.log(text.search(/\d+/)); // 5 (индекс начала цифр)
- match() — возвращает массив совпадений или null:
let text = "The rain in Spain";
console.log(text.match(/ain/)); // ["ain", index: 5, ...]
Рекомендации
Для простой проверки наличия подстроки (без учёта позиции) всегда используйте includes() — он более читаемый и понятный. indexOf() стоит применять, если вам нужна позиция вхождения. search() и match() — для работы с регулярными выражениями.
Совместимость: includes() поддерживается всеми современными браузерами и Node.js. Для поддержки IE используйте indexOf().
Проверка с использованием регулярных выражений
Если вам нужно более гибкое сравнение (например, с игнорированием регистра или поиск по шаблону), используйте метод test() объекта RegExp:
let text = "JavaScript is fun";
let regex = /javascript/i; // флаг i - игнорирование регистра
console.log(regex.test(text)); // true
// Поиск цифр в строке
let text2 = "User123";
console.log(/\d/.test(text2)); // true
Также можно использовать метод match() для получения детальной информации о совпадении:
let text = "Hello 123 World";
let result = text.match(/\d+/);
if (result) {
console.log("Найдено число:", result[0]); // "123"
}
Регулярные выражения особенно полезны, когда нужно проверить сложные шаблоны: email, телефон, URL и т.д. Однако для простой проверки "содержит ли строка другую строку" они избыточны — лучше использовать includes().
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги