Статичные регэкспы
В некоторых реализациях javascript регэкспы,
заданные коротким синтаксисом /.../ -
статичны. То есть, такой объект создается
один раз в некоторых реализациях JS,
например в Firefox. В Chrome все ок.
1
|
function f()
{
|
|
2
|
//
при многократных заходах в функцию
объект один и тот же
|
По
стандарту эта возможность разрешена
ES3, но запрещена ES5.
Из-за
того, что lastIndex при глобальном поиске
меняется, а сам объект регэкспа статичен,
первый поиск увеличивает lastIndex,
а последующие - продолжают искать со
старого lastIndex,
т.е. могут возвращать не все результаты.
При
поиске всех совпадений в цикле проблем
не возникает, т.к. последняя итерация
(неудачная) обнуляет lastIndex.