Есть строка:
var stroka = "osab-kr-abmd-eqabt-ldab"
Мы хотим узнать под какими индексами в этой строке начинаются последовательности символов «ab». Как это сделать?
В решении задачи нам поможет такое понятие как Итератор Регулярных Выражений по Строке — RegExpStringIterator {}
Он имеет единственный метод next(), который вызывается в момент сопоставления строки по шаблону регулярного выражения. Итератор нужно преобразовать в массив. Каждый успешный результат сопоставления будет возвращать отдельные массивы, у которых будет указан индекс найденного положения сопоставления последовательности символов.
Для получения итератора используется метод matchAll()
. Возможны два сценария вызова метода matchAll()
.
Решение № 1 — Через строковый метод matchAll ( regexp )
Есть строка:
var stroka = "osab-kr-abmd-eqabt-ldab"
[...stroka.matchAll(/ab/g)]
Получаем массив из массивов:

Теперь мы можем пробежать по новому массиву и получить только числовые индексы позиций начала появления последовательностей в строке
[...stroka.matchAll(/ab/g)].map(i=>i.index)
Нам вернётся
[2, 8, 15, 21]

Решение № 2 — Через метод регулярных выражений [ @@matchAll ] ( string )
Есть строка:
var stroka = "osab-kr-abmd-eqabt-ldab" [.../ab/g[Symbol.matchAll](stroka)]
Получаем массив из массивов:
[.../ab/g[Symbol.matchAll](stroka)].map(i=>i.index)
 - JavaScript Через метод регулярных выражений [@@matchAll](string) - JavaScript](https://efim360.ru/wp-content/uploads/cherez-metod-regulyarnyh-vyrazhenij-@@matchallstring-javascript-1024x413.png)
Информационные ссылки
Стандарт ECMAScript — Раздел «22.1.3.12 String.prototype.matchAll ( regexp )» — https://tc39.es/ecma262/#sec-string.prototype.matchall
Стандарт ECMAScript — Раздел «22.2.5.8 RegExp.prototype [ @@matchAll ] ( string )» — https://tc39.es/ecma262/#sec-regexp-prototype-matchall