У меня странная проблема с работой функции Javascript Regexp.exec. При многократном вызове функции для новых (я думаю ...) объектов регулярных выражений она работает один раз каждые два. Я вообще не понимаю, почему!
Вот небольшой пример цикла, но он делает то же самое, когда используется один раз в функции и вызывается несколько раз.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/g).exec('abc'));
}
> 0 ["b", "b"]
> 1 null
> 2 ["b", "b"]
> 3 null
> 4 ["b", "b"]
При удалении / g возвращается в нормальное состояние.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/).exec('abc'));
} /* no g ^ */
> 0 ["b", "b"]
> 1 ["b", "b"]
> 2 ["b", "b"]
> 3 ["b", "b"]
> 4 ["b", "b"]
Я предполагаю, что есть оптимизация, сохраняющая объект регулярного выражения, но это кажется странным.
Это поведение одинаково в Chrome 4 и Firefox 3.6, однако оно работает так, как (I) ожидалось в IE8. Я верю, что это задумано, но я не могу найти там логику, может быть, вы сможете мне помочь!
Спасибо