Как проверить, содержит ли строка подстроку в JavaScript? Я ожидал метод String.contains(), но, похоже, он не существует. Какие стандартные методы существуют для проверки, содержит ли строка определенную подстроку в JavaScript?
В JavaScript существует несколько методов для проверки, содержит ли строка подстроку, хотя, возможно, вы ожидали наличия метода String.contains(). Наиболее часто используемыми и рекомендуемыми методами являются includes(), indexOf(), search() и match().
Содержание
- Метод includes()
- Метод indexOf()
- Метод search()
- Метод match()
- Сравнение производительности
- Совместимость с браузерами
- Практические примеры
Метод includes()
Метод includes() — это самый современный и простой способ проверить, содержит ли строка подстроку. Он возвращает true, если строка содержит указанную подстроку, и false в противном случае.
const str = "Hello, world!";
const substring = "world";
console.log(str.includes(substring)); // true
console.log(str.includes("goodbye")); // false
Метод includes() также принимает необязательный второй параметр, который указывает позицию, с которой начинается поиск:
const str = "JavaScript is awesome";
console.log(str.includes("is", 10)); // false (поиск начинается с индекса 10)
console.log(str.includes("is", 5)); // true (поиск начинается с индекса 5)
Согласно FreeCodeCamp, второй аргумент — это позиция индекса, с которой начинается поиск, со значением по умолчанию 0.
Метод indexOf()
Метод indexOf() — один из старейших и наиболее надежных способов проверки наличия подстроки. Он возвращает индекс первого вхождения указанной подстроки или -1, если подстрока не найдена.
const str = "Hello, world!";
const substring = "world";
if (str.indexOf(substring) !== -1) {
console.log("Подстрока найдена!");
} else {
console.log("Подстрока не найдена!");
}
Этот подход работает, потому что indexOf() возвращает позицию (что является истинным значением) при нахождении подстроки и -1 (что является ложным значением) при отсутствии подстроки. Вы также можете использовать это более кратко:
const str = "JavaScript is awesome";
console.log(str.indexOf("is") > -1); // true
console.log(str.indexOf("not") > -1); // false
Atta Comsian объясняет, что indexOf() возвращает индекс первого вхождения подстроки в строку, что делает его подходящим для проверки наличия подстроки.
Метод search()
Метод search() похож на indexOf(), но принимает в качестве аргумента регулярное выражение вместо строки. Он возвращает индекс совпадения или -1, если совпадений не найдено.
const str = "Hello, world!";
const substring = "world";
console.log(str.search(substring)); // 7
console.log(str.search(/world/)); // 7
console.log(str.search("goodbye")); // -1
Метод search() особенно полезен, когда вам нужно выполнить сопоставление с шаблоном, а не простой поиск подстроки:
const str = "JavaScript is awesome";
console.log(str.search(/\s\w+\s/)); // 10 (находит пробелы вокруг "is")
Метод match()
Метод match() используется для поиска совпадений с регулярным выражением. Он возвращает массив, содержащий совпадения, или null, если совпадений не найдено.
const str = "Hello, world!";
const substring = "world";
if (str.match(substring)) {
console.log("Подстрока найдена!");
console.log(str.match(substring)); // ["world"]
} else {
console.log("Подстрока не найдена!");
}
Sentry объясняет, что match(searchValue) находит searchValue (регулярное выражение) в заданной строке и возвращает массив, содержащий совпадения.
Сравнение производительности
Когда важна производительность, вот как эти методы сравниваются:
| Метод | Производительность | Лучше всего подходит |
|---|---|---|
includes() |
Очень быстрая | Современные браузеры, простая проверка подстрок |
indexOf() |
Очень быстрая | Поддержка старых браузеров, нужен индекс позиции |
search() |
Медленнее | Сопоставление с шаблоном регулярных выражений |
match() |
Медленнее | Сложное сопоставление с шаблоном с захватом групп |
Согласно Stack Abuse, indexOf() подходит в качестве полифилла для includes() и хорошо работает для базовой проверки подстрок.
Совместимость с браузерами
- includes(): Не поддерживается в Internet Explorer. Для большей совместимости может потребоваться полифилл.
- indexOf(): Поддерживается во всех браузерах, включая Internet Explorer 8+.
- search(): Поддерживается во всех браузерах.
- match(): Поддерживается во всех браузерах.
Для максимальной совместимости с браузерами, особенно при поддержке старых браузеров, таких как Internet Explorer, indexOf() — ваш лучший выбор. Если вы работаете в современной среде или можете использовать транспиляторы, includes() более читабелен.
Практические примеры
Базовая проверка подстроки
function containsSubstring(str, sub) {
return str.includes(sub);
}
console.log(containsSubstring("JavaScript", "Script")); // true
console.log(containsSubstring("Hello", "World")); // false
Проверка без учета регистра
function containsCaseInsensitive(str, sub) {
return str.toLowerCase().includes(sub.toLowerCase());
}
console.log(containsCaseInsensitive("JavaScript", "script")); // true
console.log(containsCaseInsensitive("Hello World", "WORLD")); // true
Проверка нескольких подстрок
function containsAny(str, substrings) {
return substrings.some(sub => str.includes(sub));
}
console.log(containsAny("Hello world", ["hello", "world", "goodbye"])); // true
console.log(containsAny("Hello world", ["python", "java"])); // false
Проверка всех подстрок
function containsAll(str, substrings) {
return substrings.every(sub => str.includes(sub));
}
console.log(containsAll("JavaScript is awesome", ["JavaScript", "awesome"])); // true
console.log(containsAll("JavaScript is awesome", ["JavaScript", "PHP"])); // false
Заключение
JavaScript предлагает несколько эффективных методов для проверки, содержит ли строка подстроку:
- Используйте
includes()для современного, чистого кода, когда вам нужен только логический результат и нет необходимости в совместимости с Internet Explorer - Используйте
indexOf()для максимальной совместимости с браузерами или когда вам нужна фактическая позиция подстроки - Используйте
search(), когда вам нужны возможности сопоставления с шаблоном регулярных выражений - Используйте
match(), когда вам нужно захватывать группы или выполнять сложное сопоставление с шаблоном
Метод includes() обычно предпочтителен в современном разработке JavaScript благодаря своей ясности и читаемости, в то время как indexOf() остается наиболее совместимым вариантом во всех браузерах.
Источники
- How to check whether a string contains a substring in JavaScript? - Stack Overflow
- How to Check Whether a String Contains a Substring in JavaScript? | Sentry
- Check for Substring in JavaScript - GeeksforGeeks
- Check if a string contains a substring using indexOf() in JavaScript - Atta Comsian
- How to Check Whether a String Contains a Substring in JavaScript - Tutorial Republic
- JavaScript: Check if String Contains a Substring - Stack Abuse
- How to Check if a String Contains a Substring in JavaScript - Bacancy Technology
- How to check if string contains substring in JavaScript – TecAdmin
- Check if a string contains a substring in JavaScript - 30 seconds of code
- How to Check if a String Contains a Substring in JavaScript - FreeCodeCamp