Один из вариантов - использовать цикл do-while
, чтобы вы могли break
внутри while(true)
:
const re = /<%([^%>]+)?%>/g;
while (true) {
const match = re.exec('<%hello%> you <%!%>');
if (!match) {
break;
}
console.log(match);
}
ИМО, эта ситуация - время один в Javascript, когда назначение внутри условного обозначения яснее, чем альтернативное. Я бы не боялся отключить это правило для этой строки.
Предполагая, что вы хотите получить первую группу захвата, в будущем вы сможете использовать string.prototype.matchAll :
const str = '<%hello%> you <%!%>';
const contentInsidePercents = [...str.matchAll(/<%([^%>]+)?%>/g)]
.map(match => match[1]);