Содержит ли строка заданную подстроку?
и в чем этот тайный смысл публикации переводов вопросов-ответов, при этом даже без упоминания автора оригинального ответа и ссылки на него? Ладно бы связь такая поддерживалась на уровне СО и репутация оригинальному ответу шла. А так сомнительное начинание с созданием фейковых вопросов.
16 мар 2017 в 21:54
– user207618
16 мар 2017 в 22:04
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Способов, на самом деле, достаточно много:
- String#indexOf(str: String[, fromIndex: Number]): Number — один из старейших способов. Возвращает найденную позицию str или, если подстрока не найдена, -1 .
Параметр fromIndex определяет отступ поиска. Важно: В условии необходимо использовать сравнение и обязательно строгое:- Без сравнения, -1 (отсутствие подстроки) трактуется как true .
- Может возвращать 0 (совпал первый символ), что приводится обычным сравнением к false .
'Hello, world!'.indexOf('world'); // 7 'Hello, world!'.indexOf('o'); // 4, в конце hello 'Hello, world!'.indexOf('o', 5); // 8, вторая буква в world !!'Hello, world!'.indexOf('z'); // true, отрицательное число приводится к true !!'Hello, world!'.indexOf('H'); // false, 0 трактуется как false
"Date of birth of Einstein: 3/14/1879".search(/\d/); // 32
- Возвращает Boolean , вместо позиции, что может быть более ожидаемым.
- Работает быстрее. Однако разница ощутима только на весьма больших объёмах, проверить.
'Hello, world!'.includes('o'); // true, в конце hello 'Hello, world!'.includes('o', 9); // false, после девятого символа нет 'o'
"Date of birth of Einstein: 3/14/1879".match(/(\d)/); // [0: "1879", 1: "1879", index: 32, input: "Date of birth of Einstein: 3/14/1879", length: 2] `Date of birth of Einstein: 3/14/1879; Date of birth of Hendrik Lorentz: 7/18/1853`.match(/(\d)\/(\d)\/(\d)/g); // [0: "3/14/1879", 1: "7/18/1853", length: 2]
Есть ещё методы RegExp#test или RegExp#exec , который так же могут быть использованы для проверки, но это уже совсем другая история.
Как найти слово в строке 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-разработке? Переходите по ссылке ниже:
String.prototype.includes()
Метод includes() проверяет, содержит ли строка заданную подстроку, и возвращает, соответственно true или false .
Синтаксис
str.includes(searchString[, position])
Параметры
Строка для поиска в данной строке.
Позиция в строке, с которой начинать поиск строки searchString , по умолчанию 0.
Возвращаемое значение
true , если искомая строка была найдена в данной строке; иначе false .
Описание
Этот метод позволяет вам определять, содержит ли строка другую строку.
Чувствительность к регистру символов
Метод includes() является регистрозависимым. Например, следующее выражение вернёт false :
"Синий кит".includes("синий"); // вернёт false
Примеры
Использование includes()
var str = "Быть или не быть вот в чём вопрос."; console.log(str.includes("Быть")); // true console.log(str.includes("вопрос")); // true console.log(str.includes("несуществующий")); // false console.log(str.includes("Быть", 1)); // false console.log(str.includes("БЫТЬ")); // false
Полифил
Этот метод был добавлен в спецификации ECMAScript 2015 и может быть недоступен в некоторых реализациях JavaScript. Однако, можно легко эмулировать этот метод:
if (!String.prototype.includes) String.prototype.includes = function (search, start) "use strict"; if (typeof start !== "number") start = 0; > if (start + search.length > this.length) return false; > else return this.indexOf(search, start) !== -1; > >; >
Спецификации
Specification ECMAScript Language Specification
# sec-string.prototype.includesПоддержка браузерами
BCD tables only load in the browser
String.prototype.contains
В Firefox с версии 18 по версию 39, этот метод назывался «contains». Он был переименован в «includes» в замечании баг 1102219 по следующей причине:
Как было сообщено, некоторые сайты, использующие MooTools 1.2, ломаются в Firefox 17. Эта версия MooTools проверяет существование метода String.prototype.contains() и, если он не существует, добавляет свой собственный. С введением этого метода в Firefox 17, поведение этой проверки изменилось таким образом, что реализация String.prototype.contains() , основанная на MooTools, сломалась. В результате это изменение было отключено в Firefox 17. Метод String.prototype.contains() доступен в следующей версии Firefox — Firefox 18.
MooTools 1.3 принудительно использует свою собственную версию метода String.prototype.contains() , так что использующие его веб-сайты не должны ломаться. Тем не менее, следует отметить, что сигнатура метода в MooTools 1.3 отличается от сигнатуры метода в ECMAScript 2015 (во втором аргументе). В MooTools 1.5+ сигнатура изменена для соответствия стандарту ES2015.
В Firefox 48, метод String.prototype.contains() был удалён. Следует использовать только String.prototype.includes() .
Смотрите также
- Array.prototype.includes() Экспериментальная возможность
- TypedArray.prototype.includes() (en-US) Экспериментальная возможность
- String.prototype.indexOf()
- String.prototype.lastIndexOf()
- String.prototype.startsWith()
- String.prototype.endsWith()
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 7 авг. 2023 г. by MDN contributors.
Проверьте, содержит ли строка другую строку в качестве подстроки в JavaScript
В этом посте мы обсудим, как проверить, содержит ли строка другую строку в качестве подстроки в JavaScript.
1. Использование String.prototype.includes() функция
The includes() можно использовать для проверки того, включает ли данная строка другую строку или нет. Он возвращается true если искомая строка находится в заданной строке; false в противном случае. Вот как будет выглядеть код:
var source = 'Hello World' ;
var target = 'llo' ;
console . log ( source . includes ( target ) ) ;Этот метод был представлен в ES6 и пока может быть доступен не во всех реализациях JavaScript. Однако в MDN есть простой полифилл для этого метода: