Задать вопрос
RazerVG
@RazerVG
Full-stack

Есть ли возможность получить доступ к группам, кроме метода exec в регулярных выражениях?

Если способ получить доступ к именованным группам, кроме exec?

const re = new RegExp(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/, 'gmi')
const str = '2015-01-02 2015-01-02';

let result;

while (result !== null) {
    result = re.exec(str);
    console.log(result);
}


а то while не совсем удобен?
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
while не совсем удобен

Можно while заменить на for, переместить вызов exec в условие продолжения цикла - получится одна строка вместо трёх, область видимости вне цикла не загажена не нужной там переменной, вроде бы неплохо:

for (let m; (m = re.exec(str)) !== null;) {
  console.log(m.groups);
}

Отказаться от exec стоит по другой причине. Проблема в том, что если забыть флаг g при определении регулярного выражения, то exec будет при каждом вызове выдавать первое совпадение, т.е., цикл получится бесконечным. А вот с matchAll такой ерунды не случится, без флага выдаст ошибку:

for (const { groups } of str.matchAll(re)) {
  console.log(groups);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы