Search: примеры (JAVASCRIPT)

Использование search в JavaScript: полное руководство с кодом
Раздел: Строки, Поиск
search(regexp): number

Базовое описание функции search

Метод search() в JavaScript применяется к строкам для поиска соответствия регулярному выражению. Этот метод возвращает индекс первого совпадения или -1, если совпадений не найдено.

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

Синтаксис: str.search(regexp)

Аргумент regexp: регулярное выражение (объект RegExp). Если передать не-RegExp объект, он будет неявно преобразован в RegExp с помощью new RegExp(regexp).

Возвращаемое значение: целое число, указывающее индекс первого совпадения. Если совпадений нет, возвращается -1.

Базовые примеры использования

Поиск с простым регулярным выражением:

let str = 'JavaScript tutorial';
let result = str.search(/script/i);
console.log(result);
4

Поиск с флагом чувствительности к регистру:

let str = 'JavaScript tutorial';
let result = str.search(/script/);
console.log(result);
-1

Использование строки вместо регулярного выражения:

let str = 'JavaScript tutorial';
let result = str.search('script');
console.log(result);
4

Альтернативные методы в JavaScript

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

test() метода RegExp возвращает булево значение, подходит для простой проверки наличия совпадения.

exec() выполняет поиск одного совпадения и возвращает массив с информацией о нем, включая группы захвата.

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

Распространенные ошибки

Забывают, что метод возвращает только первое совпадение:

let str = 'script script';
let result = str.search(/script/g);
console.log(result);
0

Некорректная обработка специальных символов в строках:

let str = 'test.com';
let result = str.search('.');
console.log(result);
0

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

Игнорирование глобального флага, который не влияет на результат search:

let str = 'a a a';
let result = str.search(/a/g);
console.log(result);
0

Изменения в современных версиях

Спецификация ECMAScript 2015 добавила поддержку символов Юникода через флаг u. Без этого флага лишние символы в суррогатных парах могут обрабатываться некорректно.

let str = '????'; // символ, состоящий из суррогатной пары
console.log(str.search(/^.$/));
console.log(str.search(/^.$/u));
-1
0

Стандартизировано преобразование не-RegExp объектов в регулярные выражения через конструктор RegExp.

Расширенные примеры применения

Поиск позиции с использованием границ слов:

Пример javascript
let text = 'JavaScript is great but Java is different';
let pos = text.search(/\bJava\b/);
console.log(pos);
28

Использование групп захвата не влияет на возвращаемый индекс:

Пример javascript
let str = 'Date: 2023-12-01';
let pos = str.search(/(\d{4})-(\d{2})-(\d{2})/);
console.log(pos);
6

Поиск с отрицательным просмотвом вперед:

Пример javascript
let str = '100px 200em 300rem';
let pos = str.search(/\d+(?!px)/);
console.log(pos);
5

Комбинирование с другими методами для извлечения данных:

Пример javascript
function extractDomain(url) {
let protocolPos = url.search(/[:/]/);
if (protocolPos !== -1) {
return url.substring(0, protocolPos);
}
return '';
}
console.log(extractDomain('https://example.com'));
https

Поиск с использованием символов Юникода:

Пример javascript
let str = 'café restaurant';
let pos = str.search(/\p{L}/u);
console.log(pos);
0

Обработка строк с переносами строк:

Пример javascript
let multiline = 'First line\nSecond line';
let pos = multiline.search(/^Second/m);
console.log(pos);
12

Аналоги в других языках программирования

PHP: функция preg_match() выполняет поиск по регулярному выражению, но возвращает 1 или 0.

$str = 'JavaScript tutorial';
$result = preg_match('/script/i', $str, $matches, PREG_OFFSET_CAPTURE);
echo $matches[0][1];
4

Python: метод search() из модуля re возвращает объект Match или None.

import re
str = 'JavaScript tutorial'
result = re.search(r'script', str, re.IGNORECASE)
print(result.start() if result else -1)
4

MySQL: оператор REGEXP в условиях WHERE проверяет соответствие регулярному выражению.

SELECT * FROM table WHERE column REGEXP 'script';

JS search function comments

En
Search Executes a search for a match between a regular expression and this string