Как проверить входит ли подстрока в строку javascript
Перейти к содержимому

Как проверить входит ли подстрока в строку javascript

  • автор:

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

Обычной операцией во многих языках программирования является проверка, содержит ли строка другую строку. Хотя это простая и распространенная задача, имена методов часто различаются в разных языках программирования. Например, вот небольшой пример методов, используемых для достижения этого на разных языках:

  1. Java: String.contains() , String.indexOf() и т.д.
  2. Python: оператор in , String.index() , String.find()
  3. Go: strings.Contains()
  4. Ruby: string.include?

Смысл должен быть понятен. Есть миллион способов сделать это, и кажется, что каждый язык реализует это по-своему.

В любом случае, давайте посмотрим, как можно проверить, содержит ли строка подстроку в JavaScript.

Первые два метода, показанные ниже, также работают с массивами, которые сообщают вам, содержит ли массив заданное значение (или его индекс). Помните об этом при чтении статьи, так как она, вероятно, поможет вам в подобных случаях.

String.includes()

Этот метод был введен в ES6 и обычно является предпочтительным методом для простых случаев использования. Если все, что вам нужно сделать, это получить логическое значение, указывающее, находится ли подстрока в другой строке, то это то, что вы хотите использовать.

Работает это так:

> let str = 'stackabuse'; > let substr = 'stack'; > str.includes(substr); true 

Как видите, возвращается логическое значение, поскольку строка «stack» является подстрокой «stackabuse».

Это поиск с учетом регистра, поэтому следующее не будет соответствовать подстроке:

> let str = 'StackAbuse'; > let substr = 'stack'; > str.includes(substr); false 

Хотя этого достаточно для большинства случаев использования, метод includes() также предоставляет другой вариант, который может быть полезен для вас. Может быть предоставлен второй аргумент, который сообщает методу, с какого индекса начинать поиск. Поэтому, если вы знаете, что подстрока не содержится в первых 50 символах (или вы просто не хотите, чтобы она соответствовала этим символам), то вы можете использовать метод, подобный следующему:

str.includes(substr, 50); 

Смещение ниже 0 просто начинает поиск с индекса 0, а смещение больше, чем string.length , возвращает false , поскольку поиск начинается с string.length .

String.indexOf()

Метод String.indexOf() очень похож на includes() (и его также можно использовать в polyfill includes() ), но единственное отличие — это возвращаемое значение. Вместо того, чтобы возвращать логическое значение, указывающее наличие подстроки, он фактически возвращает индексное местоположение подстроки, или -1, если его нет.

> let str = 'stackabuse'; > let substr = 'abuse'; > str.indexOf(substr); 5 > str.indexOf('apple'); -1

Как видите, этот метод возвращает позицию индекса подстроки, начинающуюся с на 0, и -1, если подстрока не была найдена.

Как и метод includes() , 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)

В таких случаях вы должны использовать метод includes() , поскольку он более подвержен ошибкам.

Regex

Одним из наиболее полезных и мощных способов проверки подстроки является использование регулярных выражений. Использование регулярных выражений для такой задачи дает вам гораздо больше гибкости, чем в предыдущих методах, где вы можете проверять только постоянную строку. Несмотря на то, что регулярное выражение является слишком большой темой, чтобы полностью охватить здесь, мы можем по крайней мере взглянуть на некоторые полезные функции для нашего варианта использования.

Проверка на наличие подстрок в строке с регулярным выражением может быть выполнена с помощью метода RegExp.test() :

> let str = 'stackabuse'; > /stack/.test(str); true 

В отличие от двух предыдущих методов, теперь мы можем выполнять поиск без учета регистра с флагом i :

> let str = 'StackAbuse'; > /stack/i.test(str); true 

В качестве более сложного примера, скажем, вы хотите увидеть, содержит ли строка почтовый индекс (5-значный почтовый индекс), но вам не важно, какой почтовый индекс находится в строке. Такую проблему нельзя решить с помощью includes() или indexOf() . Но с помощью регулярных выражений мы можем легко проверить это:

> let str = 'My zip code is 90210'; > /\d/.test(str); true > str = 'My address is 123 Fake St.'; > /\d/.test(str); false 

Не смотря на то что JavaScript не такой быстрый как например C, в некоторых случаях время выполнения скрипта может быть критичным. В этом случае RegEx лучше заменить на более простой и легковесный метод includes() .

как проверить наличие в строке js

Например, есть строка «Степашка лежал на пороге», и нам нужно узнать, содержится ли в ней подстрока «пороге».

Для этого можем воспользоваться методом includes() у строковой переменной. Он возвращает true , если строка содержит указанный символ или подстроку, и false в противном случае. Вот пример кода:

const str = 'Степашка лежал на пороге'; const subStr = 'пороге'; if (str.includes(subStr))  console.log(`Строка "$str>" содержит подстроку "$subStr>".`); > else  console.log(`Строка "$str>" не содержит подстроку "$subStr>".`); > 

Также, для определения индекса первого вхождения подстроки в строку, есть и другие методы. Например, функция indexOf() .

Как найти слово в строке JavaScript? Ищем символ в строке. Метод indexOf()

Для поиска слова, символа или любой другой подстроки в строке в языке программирования JavaScript используют хорошо известный метод indexOf. В результате проверки метод возвращает позицию первого совпадения, если же совпадение по введённому вами символу найдено не будет, будет возвращено -1.

Искомое слово или символ указываются первым параметром. Что касается второго параметра, то он необязателен. Зато с его помощью мы можем передать номер (индекс) символа или буквы, с которого надо начинать поиск. Важный момент: метод indexOf() чувствителен к регистру вводимых вами букв, слов и символов.

Синтаксис метода предельно прост:

 
строка.indexOf(первый параметр указывает, что ищем, [второй параметр определяет, откуда начинаем поиск]);

Приведем примеры поиска слова в строке JavaScript

В примере ниже у нас есть строка 'Я учусь в OTUS', причём мы ищем в строке слово 'учусь'. Метод вернёт нам индекс 2, т. к. именно с этой позиции начинается слово 'учусь' в строке. Тут стоит вспомнить, что индексация (подсчёт позиции) начинается с нуля, а не с единицы.

 
let str = 'Я учусь в OTUS; console.log(str.indexOf('учусь'));

В результате получим следующий вывод:

В очередном примере в строке 'Я учу Java и учу JavaScript в OTUS' давайте найдём слово 'учу', но не первое его вхождение в строку, а второе. Следовательно, начнём поиск с 5-й позиции, указав это вторым параметром.

 
let str = 'Я учу Java и учу JavaScript в OTUS'; console.log(str.indexOf('учу', 5));

Проверка приведёт к возвращению числа 13, т. к. именно с этой позиции начинается второе слово «учу» в нашей строке.

Давайте приведем ещё парочку примеров. В коде ниже, исследуемый нами метод поиска вернёт -1, ведь подстроки 'Go' в нашей строке попросту нет:

 
let str = 'Я учусь в OTUS'; console.log(str.indexOf('Go'));

В принципе, как видите, ничего сложного. Нам вернётся -1 и в случае, если мы будем искать одинаковые слова с разным регистром (OTUS не равно OtuS):

 
let str = 'Я учусь в OTUS; console.log(str.indexOf(' OtuS'));

Вернётся -1 и в последнем примере, ведь после позиции, которую мы выбрали вторым параметром для поиска, совпадения найдены не будут:

 
let str = 'Я учусь в OTUS'; console.log(str.indexOf('учусь', 7));

Проверка приведёт к следующему результату:

Вот и всё, что можно сказать про простейший поиск слов и символов в строке JavaScript. Напоследок стоит упомянуть метод lastIndexOf() , тоже осуществляющий поиск символа, слова или любой подстроки в строке. Разница заключается лишь в том, что этот метод начинает искать с конца строки, а не с начала — в остальном он работает аналогично.

Больше операций по поиску в строке JavaScript, включая дополнительные операции по работе с подстрокой, вы найдёте здесь.

Интересует профессиональный курс по JavaScript-разработке? Переходите по ссылке ниже:

Метод indexOf

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

Синтаксис

строка.indexOf(что ищем, [откуда начинать поиск]);

Пример

Давайте найдем позицию первого вхождения подстроки:

let str = 'ab cd cd cd ef'; let res = str.indexOf('cd'); console.log(res);

Результат выполнения кода:

Пример

Давайте укажем позицию, с которой начинать поиск:

let str = 'ab cd cd cd ef'; let res = str.indexOf('cd', 4); console.log(res);

Результат выполнения кода:

Пример

Теперь поищем несуществующую подстроку:

let str = 'ab cd cd cd ef'; let res = str.indexOf('xx'); console.log(res);

Результат выполнения кода:

Пример

Давайте поищем подстроку, указанную в неподходящем для текущей строки регистре:

let str = 'ab cd cd cd ef'; let res = str.indexOf('CD'); console.log(res);

Результат выполнения кода:

Смотрите также

  • метод startsWith ,
    который проверяет начало строки
  • метод endsWith ,
    который проверяет конец строки
  • метод lastIndexOf ,
    который ищет последнее вхождение подстроки
  • метод includes ,
    который ищет строку
  • метод at ,
    который ищет символ строки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *