Это происходит за счет автоматического обновления при выполнении exec индекса конца последнего поиска lastIndex. Следующий поиск начинается от lastIndex.
Например, следующий скрипт выдает все совпадения:
Выделить все
var myRe = /ab*/g;
var str = "abbcdefabh";
var myArray;
while((myArray = myRe.exec(str)) != null){var msg = "Нашел " + myArray[0] + ". ";
msg += "Следующий поиск начнется с " + myRe.lastIndex;
document.write(msg);
}
Он выведет текст:
Нашел abb. Следующий поиск начнется с 3
Нашел ab. Следующий поиск начнется с 9
Вы можете вызвать exec при неявном определении объекта RegExp:
var matches = /(hello \S+)/.exec('This is a hello world!');
alert(matches[1]);
Дежурная шутка
Пару дней назад звонит мне на сотовый товарищ, которого я подсадил на игру Сталкер: Тайные Тропы 2. По ходу игры нужно выполнить один квест - задание: по просьбе главного бандита по кличке Князь надо убить за долги одного из сталкеров. Товарищ спрашивает, - "Я нашёл этого сталкера, мне его сразу пристрелить или как?" На что я ему отвечаю, - "Тебе бы только пристрелить кого-нибудь! Сначала душевно с ним поговори, он тебе кое-какую информацию даст. А потом можешь и пристрелить. Да и Князь тебе благодарен будет!"
Надо было видеть глаза пассажиров, ехавших рядом со мной в автобусе!