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.
Расширенные примеры применения
Поиск позиции с использованием границ слов:
let text = 'JavaScript is great but Java is different';
let pos = text.search(/\bJava\b/);
console.log(pos);28
Использование групп захвата не влияет на возвращаемый индекс:
let str = 'Date: 2023-12-01';
let pos = str.search(/(\d{4})-(\d{2})-(\d{2})/);
console.log(pos);6
Поиск с отрицательным просмотвом вперед:
let str = '100px 200em 300rem';
let pos = str.search(/\d+(?!px)/);
console.log(pos);5
Комбинирование с другими методами для извлечения данных:
function extractDomain(url) {
let protocolPos = url.search(/[:/]/);
if (protocolPos !== -1) {
return url.substring(0, protocolPos);
}
return '';
}
console.log(extractDomain('https://example.com'));https
Поиск с использованием символов Юникода:
let str = 'café restaurant';
let pos = str.search(/\p{L}/u);
console.log(pos);0
Обработка строк с переносами строк:
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';