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
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: Парсинг пользовательских данных
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: Поиск с именованными группами
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: Многострочный поиск
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);