match() ищет совпадения строки с шаблоном и возвращает результат поиска.
Главная особенность этого метода в том, что его поведение зависит от того, есть ли у регулярного выражения флаг g.
Синтаксис
str.match(regexp)
Метод вызывается у строки и обычно работает с регулярным выражением.
Результат может быть:
- массивом
null, если совпадений нет
Как работает match()
const text = "Version 2.0";
console.log(text.match(/\d/));
Без флага g метод возвращает информацию о первом совпадении.
match() без флага g
Если у регулярного выражения нет флага g, match() возвращает массив с данными о первом совпадении.
const text = "abc123";
const result = text.match(/\d+/);
console.log(result[0]); // "123"
console.log(result.index); // 3
В таком результате обычно есть:
- найденный текст
- индекс совпадения
- исходная строка
match() с флагом g
Если у регулярного выражения есть флаг g, match() возвращает массив всех найденных совпадений.
const text = "a1 b2 c3";
console.log(text.match(/\d/g)); // ["1", "2", "3"]
В этом режиме метод уже не возвращает index и другие служебные поля, а отдаёт только найденные значения.
Если совпадений нет
Если совпадений нет, match() возвращает null.
const text = "JavaScript";
console.log(text.match(/\d/)); // null
Это важно учитывать перед обращением к элементам результата.
Когда это полезно
match() удобно использовать, когда:
- нужно найти первое совпадение и узнать его индекс
- нужно получить все совпадения по регулярному выражению
- нужно быстро вытащить части строки по шаблону
Пример:
const text = "Order #12345";
const result = text.match(/\d+/);
console.log(result[0]); // "12345"
match() и search()
search() возвращает только индекс первого совпадения, а match() возвращает само совпадение или массив совпадений.
const text = "abc123";
console.log(text.search(/\d+/)); // 3
console.log(text.match(/\d+/)); // ["123", ...]
Если нужен только индекс, часто достаточно search(). Если нужен найденный текст, удобнее match().
match() и matchAll()
match() с флагом g возвращает просто массив найденных значений.
const text = "a1 b2 c3";
console.log(text.match(/\d/g)); // ["1", "2", "3"]
Если нужно получить все совпадения вместе с группами и индексами, чаще используют matchAll().
Частые ошибки
Забывать про null
const text = "hello";
console.log(text.match(/\d/)); // null
Если совпадения нет, результат будет null, а не пустой массив.
Не учитывать разницу между режимом с g и без g
const text = "a1 b2 c3";
console.log(text.match(/\d/)); // первое совпадение
console.log(text.match(/\d/g)); // все совпадения
Это одно из самых важных различий у match().
Ждать index при использовании g
const text = "a1 b2";
const result = text.match(/\d/g);
console.log(result); // ["1", "2"]
С флагом g метод возвращает только массив найденных строк без index.
Быстрая памятка
match()ищет совпадения строки с шаблоном- без
gвозвращает первое совпадение с дополнительной информацией - с
gвозвращает массив всех совпадений - если ничего не найдено, метод вернёт
null - для более подробной работы со всеми совпадениями есть
matchAll()
Коротко
match() - это метод строки в JavaScript для поиска совпадений по шаблону. Он удобен тем, что может вернуть либо первое совпадение с подробной информацией, либо все совпадения сразу, если у регулярного выражения есть флаг g.