Данный пример возвращает итератор, который потом можно использовать для forEach или для for
const matches = (text, pattern) => ({ [Symbol.iterator]: function * () { const clone = new RegExp(pattern.source, pattern.flags); let match = null; do { match = clone.exec(text); if (match) { yield match; } } while (match); } });
И пример использования.
for (const match of matches('abcdefabcdef', /ab/g)) { console.log(match); }