search() ищет совпадение в строке и возвращает индекс первого найденного результата.
Если совпадения нет, метод вернёт -1.
Главная особенность search() в том, что он умеет работать не только со строкой, но и с регулярным выражением.
Синтаксис
str.search(pattern)
Метод вызывается у строки и возвращает число.
В качестве pattern можно передать:
- строку
- регулярное выражение
Как работает search()
const text = "JavaScript";
console.log(text.search("Script")); // 4
console.log(text.search("Java")); // 0
console.log(text.search("Python")); // -1
Метод возвращает индекс первого совпадения.
search() с регулярным выражением
Чаще всего search() используют именно с регулярными выражениями.
const text = "Version 2.0";
console.log(text.search(/\d/)); // 8
Здесь метод нашёл первую цифру в строке.
Можно искать и более сложные шаблоны:
const text = "user@mail.com";
console.log(text.search(/@/)); // 4
console.log(text.search(/[a-z]+\./)); // 5
Если совпадения нет
Если строка или шаблон не найдены, search() вернёт -1.
const text = "JavaScript";
console.log(text.search(/python/i)); // -1
Регистр важен
Если искать обычной строкой или обычным regex без флага i, поиск будет чувствителен к регистру.
const text = "JavaScript";
console.log(text.search("java")); // -1
console.log(text.search(/java/)); // -1
console.log(text.search(/java/i)); // 0
Если нужен поиск без учёта регистра, для регулярного выражения обычно добавляют флаг i.
Когда это полезно
search() удобно использовать, когда:
- нужно найти индекс первого совпадения
- поиск идёт по шаблону, а не по точной подстроке
- важно использовать регулярное выражение
Пример:
const password = "abc123";
console.log(password.search(/\d/)); // 3
search() и indexOf()
indexOf() хорошо подходит для поиска обычной строки, а search() полезен, когда нужен regex.
const text = "Version 2.0";
console.log(text.indexOf("2")); // 8
console.log(text.search(/\d/)); // 8
Но indexOf() не умеет искать по регулярному выражению:
const text = "Version 2.0";
console.log(text.search(/\d/)); // 8
Если нужна простая подстрока, чаще используют indexOf() или includes(). Если нужен шаблон, удобнее search().
Важное ограничение
search() всегда возвращает только индекс первого совпадения.
Он не возвращает все совпадения и не даёт сам текст найденного фрагмента.
Если нужно получить сами совпадения, чаще используют:
match()matchAll()replace()
Частые ошибки
Ждать от search() массив совпадений
const text = "abc123";
console.log(text.search(/\d/)); // 3
Метод возвращает только индекс, а не найденную строку и не массив результатов.
Путать search() с includes()
const text = "JavaScript";
console.log(text.search("Script")); // 4
console.log(text.includes("Script")); // true
search() возвращает индекс, а includes() - булево значение.
Забывать про -1
const text = "hello";
console.log(text.search(/x/)); // -1
Если совпадения нет, нужно проверять именно -1.
Быстрая памятка
search(pattern)возвращает индекс первого совпадения- если совпадения нет, метод вернёт
-1 patternможет быть строкой или регулярным выражениемsearch()особенно полезен для regex-поиска- если нужна просто проверка наличия текста,
includes()обычно проще
Коротко
search() - это метод строки в JavaScript, который ищет совпадение и возвращает его индекс. Он особенно полезен, когда нужно искать не просто подстроку, а шаблон через регулярное выражение.