Learn JavaScript

search() - метод для поиска строки или регулярного выражения в JavaScript

search() ищет совпадение в строке и возвращает индекс первого найденного результата.

Если совпадения нет, метод вернёт -1.

Главная особенность search() в том, что он умеет работать не только со строкой, но и с регулярным выражением.

Синтаксис

str.search(pattern)

Метод вызывается у строки и возвращает число.

В качестве pattern можно передать:

  • строку
  • регулярное выражение
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, который ищет совпадение и возвращает его индекс. Он особенно полезен, когда нужно искать не просто подстроку, а шаблон через регулярное выражение.