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

Работа с функцией match для поиска в строках JavaScript
Раздел: Регулярные выражения, Поиск
match(regexp): array|null

Основные возможности метода match в JavaScript

Метод match() применяется к строкам для поиска совпадений с регулярным выражением или строкой. Основное назначение — извлечение подстрок, соответствующих заданному шаблону.

Синтаксис метода: str.match(regexp)

Аргумент regexp может быть:

  • Регулярным выражением (объект RegExp)
  • Строкой, которая автоматически преобразуется в регулярное выражение
  • undefined — возвращает массив с пустой строкой

Возвращаемые значения:

  • При использовании флага g: массив всех совпадений или null
  • Без флага g: массив с первым совпадением, группами и свойствами index, input или null
  • При передаче нерегулярного значения: простое преобразование в RegExp

Различные примеры применения match

Пример 1: Поиск без флагов

let str = 'Яблоко, банан, апельсин';
let result = str.match(/а/);
console.log(result);
['а', index: 1, input: 'Яблоко, банан, апельсин', groups: undefined]

Пример 2: Глобальный поиск

let str = '2021, 2022, 2023';
let result = str.match(/\d+/g);
console.log(result);
['2021', '2022', '2023']

Пример 3: Поиск с группами

let str = 'Дата: 12-05-2023';
let result = str.match(/(\d{2})-(\d{2})-(\d{4})/);
console.log(result);
['12-05-2023', '12', '05', '2023', index: 6, input: 'Дата: 12-05-2023', groups: undefined]

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

matchAll() — возвращает итератор с полной информацией о каждом совпадении, включая группы. Предпочтительнее при обработке сложных шаблонов с флагом g.

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

search() — возвращает только индекс первого совпадения, не предоставляя сами совпадения. Быстрее когда нужна только проверка наличия.

split() — разбивает строку по разделителю, который может быть регулярным выражением. Полезно для токенизации строк.

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

Ошибка 1: Забывают, что без флага g возвращается массив с дополнительными свойствами

let str = 'test';
let result = str.match(/t/);
console.log(result[0]); // 't'
console.log(result.index); // 0 - работает
console.log(result.input); // 'test' - работает

Ошибка 2: Не проверяют на null при отсутствии совпадений

let str = 'abc';
let matches = str.match(/\d/);
console.log(matches[0]); // TypeError: Cannot read properties of null
// Правильный подход:
if (matches) {
  console.log(matches[0]);
}

Ошибка 3: Путаница между строкой и регулярным выражением

'123'.match('2'); // Преобразуется в /2/
'123'.match(new RegExp('2')); // Явное создание RegExp

Обновления в работе метода match

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

В современных браузерах улучшена производительность при работе с длинными строками и сложными регулярными выражениями.

Изменено поведение при передаче нерегулярных значений — теперь строка автоматически не оборачивается в RegExp, если содержит флаги.

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

Пример 1: Извлечение доменов из URL

Пример javascript
let urls = 'site.com, sub.site.org, example.ru';
let domains = urls.match(/[\w-]+\.[\w.]+/g);
console.log(domains);
['site.com', 'sub.site.org', 'example.ru']

Пример 2: Парсинг пользовательских данных

Пример javascript
let text = 'Иван: 30 лет, Мария: 25 лет';
let pattern = /(\w+):\s*(\d+)\s*лет/g;
let matches;
while ((matches = pattern.exec(text)) !== null) {
  console.log(`Имя: ${matches[1]}, Возраст: ${matches[2]}`);
}
Имя: Иван, Возраст: 30
Имя: Мария, Возраст: 25

Пример 3: Поиск с именованными группами

Пример javascript
let date = '2023-12-31';
let result = date.match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
console.log(result.groups.year);
2023

Пример 4: Многострочный поиск

Пример javascript
let text = 'Первая строка\nВторая строка\nТретья';
let lines = text.match(/^.*$/gm);
console.log(lines);
['Первая строка', 'Вторая строка', 'Третья']

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

Python: методы re.findall() и re.search()

import re
result = re.findall(r'\d+', '2021, 2022, 2023')
print(result)
['2021', '2022', '2023']

PHP: функция preg_match_all()

preg_match_all('/\d+/', '2021, 2022, 2023', $matches);
print_r($matches[0]);
Array ( [0] => 2021 [1] => 2022 [2] => 2023 )

MySQL: оператор REGEXP в условиях WHERE

SELECT * FROM table WHERE column REGEXP '^[0-9]+$';

C#: метод Regex.Matches()

MatchCollection matches = Regex.Matches(input, pattern);

JS match function comments

En
Match Retrieves the result of matching a string against a regular expression