Объяснение метода matchAll()
-
Метод
matchAll()
используется для поиска всех совпадений регулярного выражения в строке. Он возвращает специальный объект-итератор, который содержит информацию о каждом найденном совпадении, включая:- сам найденный текст,
- его позицию в строке,
- дополнительные группы (если они есть в регулярке).
Особенности:
- Работает только с флагом
g
– иначе будет ошибка. - Возвращает итератор (не массив!), но его можно преобразовать в массив через
Array.from()
или[...result]
. - Каждое совпадение – это массив с подробной информацией (как в
exec()
).
Пример:
const str = 'JavaScript'; const regexp = /a/g; // ищем все буквы 'a' (с флагом g) const matches = str.matchAll(regexp); // Преобразуем итератор в массив и выводим console.log([...matches]);
Вывод:
[ ['a', index: 1, input: 'JavaScript', groups: undefined], ['a', index: 3, input: 'JavaScript', groups: undefined] ]
В строке
JavaScript
букваa
встречается дважды:- Первая
a
на позиции1
(индексация с 0:J=0, a=1, v=2, a=3, ...
). - Вторая
a
на позиции3
.
Зачем это нужно?
-
Если нужно не просто найти совпадения, но и их позиции –
matchAll()
удобнее, чемmatch()
(который без флагаg
дает только первое совпадение, а с флагомg
– только текст без деталей). -
Полезно при работе с группами в регулярках, например:
const text = 'Иван: 30, Пётр: 25'; const regexp = /(\w+): (\d+)/g; const matches = [...text.matchAll(regexp)]; // matches[0] = ['Иван: 30', 'Иван', '30', ...] // matches[1] = ['Пётр: 25', 'Пётр', '25', ...]
- Регулярное выражение должно иметь флаг
g
, иначе будет ошибкаTypeError
. - Результат – итератор, поэтому для повторного использования лучше преобразовать его в массив.
Если нужно просто проверить наличие или получить первое совпадение – можно использовать
match()
илиexec()
.Коротко:
matchAll()
– это мощный способ найти все совпадения регулярки в строке с полной информацией о каждом. -
E evo переместил эту тему из Языки программирования
-
-
-
Как привести строку к массиву
Перенесена JavaScript -
-
-
-
-
© 2025 eduity.ru, Inc. Все права защищены.