Автор оригинала: Scott Robinson.
Общая работа во многих языках программирования – проверять, содержит ли строка другой строки. Хотя это простая и общая задача, имена методов часто отличаются между языками программирования. Например, вот небольшой образец методов, используемых для достижения этого на разных языках:
- Java:
String.contains ()
,String.indexof ()
, так далее. - Python:
в
Оператор,String.index ()
,String.find ()
- Иди:
strings.contains ()
- Ruby:
string.include?
Вы получаете точку зрения. Есть миллион способов сделать это, и кажется, что каждый язык реализует его по-разному.
В любом случае, давайте посмотрим несколько способов, которыми вы можете проверить, содержит ли строка подстроки в JavaScript.
Примечание : Первые два метода, показанные ниже, также работает над массивами, что говорит вам, если массив содержит заданное значение (или индекс этого для indexOf ()
). Держите это в виду, читая статью, насколько это возможно, поможет вам для аналогичных случаев использования.
Строка. InCludes () метод
Этот метод был введен в ES6 и обычно является предпочтительным способом для простых случаев использования. Если все, что вам нужно сделать, это получить логическое значение, указывающее, является ли подстрока в другой строке, то это то, что вы хотите использовать.
Это работает так:
> let str = 'stackabuse'; > let substr = 'stack'; > str.includes(substr); true
Как видите, логическое значение возвращается с момента строки «стека» – это подстрока «Stackabuse».
Это конфиденциальный поиск для регистра, поэтому следующее не будет соответствовать подстроке:
> let str = 'StackAbuse'; > let substr = 'stack'; > str.includes(substr); false
Хотя этого достаточно для большинства случаев использования, включает в себя ()
Способ также предоставляет другой вариант, который может быть вам полезен. Вторым аргументом может быть предусмотрено, что позволяет методу, при котором индекс запустить поиск. Поэтому, если вы знаете, что подстрока не содержится в первых 50 символах (или вы просто не хотите, чтобы он соответствовал этим символам), то вы можете использовать такой метод:
str.includes(substr, 50);
Смещение ниже 0 Просто начинает поиск из индекса 0, а смещение больше чем String.Length
Возвращает ложь
Так как поиск начинается с String.Length
Отказ
Метод string.indexof ()
String.indexof ()
Метод очень похоже на предыдущий включает в себя ()
Метод (и он подходит для использования на полифиллировании для включает в себя ()
также), но единственное отличие – это возвращаемое значение. Вместо того, чтобы возвращать логическое значение, указывающее на наличие подстроки, он фактически возвращает местоположение индекса подстроки или -1, если он не присутствует.
Вот пример:
> let str = 'stackabuse'; > let substr = 'abuse'; > str.indexOf(substr); 5 > str.indexOf('apple'); -1
Как видите, этот метод возвращает положение индекса на основе 0 подстроки и A -1, когда подстрока не найден.
Так же, как включает в себя ()
Метод, indexof ()
Метод чувствителен к регистру и Также поддерживает параметр смещения:
> let str = 'StackAbuse'; > let substr = 'abuse'; > str.indexOf(substr); -1 > str.indexOf('Abu', 3); 5 > str.indexOf('Abu', 6); -1
Этот метод полезен, когда вам нужно знать точное местоположение подстроки, однако, он не такой чистый, когда просто используя его как логическое:
let str = 'stackabuse'; let substr = 'stack'; if (str.indexOf(substr) > -1) { console.log('Found the substring!'); }
В таких случаях, вы должны использовать включает в себя ()
Метод вместо этого, как это более ошибка.
Regex.
Один из более полезных и мощных способов проверить наличие подстроки – использовать регулярные выражения или регулярное выражение. Использование Regex для подобной задачи дает вам гораздо больше гибкости, чем с предыдущими методами, где вы можете проверить только на постоянную строку. В то время как Regeex слишком велик из предмета, чтобы полностью прикрыть здесь, мы можем, по крайней мере, взглянуть на некоторые полезные функции для нашего использования.
Проверка на подстроки в строке с регулярным выражением может быть достигнута с помощью Regexp.test ()
Метод:
> let str = 'stackabuse'; > /stack/.test(str); true
В отличие от предыдущих двух методов, теперь мы можем сделать нечувствительные случаи поиска с Я
флаг:
> let str = 'StackAbuse'; > /stack/i.test(str); true
В качестве более сложного примера, давайте скажем, вы хотите увидеть, содержит ли строка Zip-кода (5 цифр почтовых кодов), но вам на самом деле нет, какой Zip-код находится в строке. Эта проблема не может быть решена с использованием включает в себя ()
или indexof ()
Отказ Но с регулярным выражением мы можем легко проверить это:
> let str = 'My zip code is 90210'; > /\d{5}/.test(str); true > str = 'My address is 123 Fake St.'; > /\d{5}/.test(str); false
Хотя JavaScript не обязательно известен своей скоростью в любом случае, имею в виду, что это будет медленнее, чем более простой метод, такой как включает в себя ()
Таким образом, вы должны использовать его только для более сложных случаев, которые не могут быть решены с более простым решением.
Заключение
Манипулирующие и проверяющие струны – одна из наиболее распространенных задач, выполненных во многих языках программирования, особенно с помощью кода, обращенного пользователем. Для многих разных причин, таких как проверка строк, вам нужно проверить, содержит ли строка подстроки. В этой статье мы увидели несколько разных методов, предоставляемых JavaScript, который позволяет вам сделать именно это.