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);
}