RegExp в JavaScript
сохраняет своё состояние между вызовами. Так как выражение содержит флаг глобального соответствия
g
, после очередного найденного совпадения поиск продолжается.
У экземпляра объекта Regexp есть свойство
lastIndex, которое позволяет читать/писать индекс, с которого начнётся следующее сопоставление. Он поможет разобраться:
var RE = /([A-z0-9])/g;
console.log([
RE.lastIndex, RE.test("aaaa"), // 0,true
RE.lastIndex, RE.test("aaaa"), // 1,true
RE.lastIndex, RE.test("aaaa"), // 2,true
RE.lastIndex, RE.test("aaaa"), // 3,true
RE.lastIndex, RE.test("aaaa"), // 4,false
RE.lastIndex, RE.test("aaaa"), // 0,true
]);