НейроАгент

Как проверить, содержит ли строка подстроку в JavaScript

Узнайте несколько способов проверки, содержит ли строка подстроку в JavaScript. includes(), indexOf(), search() и match() с примерами и сравнением производительности.

Вопрос

Как проверить, содержит ли строка подстроку в JavaScript? Я ожидал метод String.contains(), но, похоже, он не существует. Какие стандартные методы существуют для проверки, содержит ли строка определенную подстроку в JavaScript?

НейроАгент

В JavaScript существует несколько методов для проверки, содержит ли строка подстроку, хотя, возможно, вы ожидали наличия метода String.contains(). Наиболее часто используемыми и рекомендуемыми методами являются includes(), indexOf(), search() и match().


Содержание


Метод includes()

Метод includes() — это самый современный и простой способ проверить, содержит ли строка подстроку. Он возвращает true, если строка содержит указанную подстроку, и false в противном случае.

javascript
const str = "Hello, world!";
const substring = "world";

console.log(str.includes(substring)); // true
console.log(str.includes("goodbye")); // false

Метод includes() также принимает необязательный второй параметр, который указывает позицию, с которой начинается поиск:

javascript
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, если подстрока не найдена.

javascript
const str = "Hello, world!";
const substring = "world";

if (str.indexOf(substring) !== -1) {
    console.log("Подстрока найдена!");
} else {
    console.log("Подстрока не найдена!");
}

Этот подход работает, потому что indexOf() возвращает позицию (что является истинным значением) при нахождении подстроки и -1 (что является ложным значением) при отсутствии подстроки. Вы также можете использовать это более кратко:

javascript
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, если совпадений не найдено.

javascript
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() особенно полезен, когда вам нужно выполнить сопоставление с шаблоном, а не простой поиск подстроки:

javascript
const str = "JavaScript is awesome";
console.log(str.search(/\s\w+\s/)); // 10 (находит пробелы вокруг "is")

Метод match()

Метод match() используется для поиска совпадений с регулярным выражением. Он возвращает массив, содержащий совпадения, или null, если совпадений не найдено.

javascript
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() более читабелен.


Практические примеры

Базовая проверка подстроки

javascript
function containsSubstring(str, sub) {
    return str.includes(sub);
}

console.log(containsSubstring("JavaScript", "Script")); // true
console.log(containsSubstring("Hello", "World")); // false

Проверка без учета регистра

javascript
function containsCaseInsensitive(str, sub) {
    return str.toLowerCase().includes(sub.toLowerCase());
}

console.log(containsCaseInsensitive("JavaScript", "script")); // true
console.log(containsCaseInsensitive("Hello World", "WORLD")); // true

Проверка нескольких подстрок

javascript
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

Проверка всех подстрок

javascript
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 предлагает несколько эффективных методов для проверки, содержит ли строка подстроку:

  1. Используйте includes() для современного, чистого кода, когда вам нужен только логический результат и нет необходимости в совместимости с Internet Explorer
  2. Используйте indexOf() для максимальной совместимости с браузерами или когда вам нужна фактическая позиция подстроки
  3. Используйте search(), когда вам нужны возможности сопоставления с шаблоном регулярных выражений
  4. Используйте match(), когда вам нужно захватывать группы или выполнять сложное сопоставление с шаблоном

Метод includes() обычно предпочтителен в современном разработке JavaScript благодаря своей ясности и читаемости, в то время как indexOf() остается наиболее совместимым вариантом во всех браузерах.

Источники

  1. How to check whether a string contains a substring in JavaScript? - Stack Overflow
  2. How to Check Whether a String Contains a Substring in JavaScript? | Sentry
  3. Check for Substring in JavaScript - GeeksforGeeks
  4. Check if a string contains a substring using indexOf() in JavaScript - Atta Comsian
  5. How to Check Whether a String Contains a Substring in JavaScript - Tutorial Republic
  6. JavaScript: Check if String Contains a Substring - Stack Abuse
  7. How to Check if a String Contains a Substring in JavaScript - Bacancy Technology
  8. How to check if string contains substring in JavaScript – TecAdmin
  9. Check if a string contains a substring in JavaScript - 30 seconds of code
  10. How to Check if a String Contains a Substring in JavaScript - FreeCodeCamp