Каким способом можно определить что в строке есть искомый текст?
Перевод вопроса "How to check whether a string contains a substring in JavaScript?"
Способов, на самом деле, достаточно много:
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
String#search([regexp: RegExp]): Number
- тот же String#indexOf
, только с регулярным выражением и отсутствием смещения.
"Date of birth of Einstein: 3/14/1879".search(/\d{4}/); // 32
String#includes(searchString: String[, position: Number]): Boolean
- более кошерный вариант String#indexOf
с двумя отличиями:
Boolean
, вместо позиции, что может быть более ожидаемым.Работает быстрее. Однако разница ощутима только на весьма больших объёмах, проверить.
'Hello, world!'.includes('o'); // true, в конце hello
'Hello, world!'.includes('o', 9); // false, после девятого символа нет 'o'
String#match(regexp: RegExp): Array | Null
- String#search
на стероидах (однако, медленнее).
Возвращает немного модифицированный массив с найденной подстрокой, позицией совпадения (index
) и свойством input
- строкой, в котором проходил поиск или Null
, если регулярка ничего не нашла.
Опционально, в массиве могут быть захваченные группы.
При использовании флага g
, вернутся все найденный совпадения (правда без групп и особых свойств):
"Date of birth of Einstein: 3/14/1879".match(/(\d{4})/); // [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{2})\/(\d{4})/g); // [0: "3/14/1879", 1: "7/18/1853", length: 2]
Есть ещё методы RegExp#test
или RegExp#exec
, который так же могут быть использованы для проверки, но это уже совсем другая история.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть несколько блоков с дата-атрибутами, значение которых являются координатыНужно перебрать все блоки у которых есть эти дата-атрибуты...
Как сформировать такой параметр 'status' : 1 в переменную get? Сейчас $_POST выглядит так