Я знаю, есть несколько регулярных выражений/lastIndex
несоответствий, но этот новость для меня!Regex/lastIndex - Неожиданное поведение
Ожидаемое поведение: Создание нового регулярного выражения (с буквальным/конструктор) будет, очевидно, создать новый объект RegExp со свойством lastIndex
равным нулю.
Фактическое поведение: (в FF, Chrome): свойство lastIndex, похоже, сохраняется через несколько созданий RegExp.
E.g.
function foo(s) {
// A *NEW* regular expression
// is created on each call of foo():
var regex = /ABC/g;
document.write(regex.lastIndex + '<br/>');
// regex.test() updates lastIndex property
regex.test(s);
// This is where the regex's life should end...
// (Why does it persist?)
}
foo('ABC');
foo('ABCABC');
foo('ABCABCABC');
Смотрите здесь: http://jsbin.com/otoze
Новый RegExp объект создается на каждой функции вызова (правильно?), Так почему следующее писались к документу ?? -
0
3
6
????
Примечание: эта странность, по-видимому, происходит в FF (3) и Chrome (2), но, что любопытно, не IE.
Является ли это ожидаемым поведением, делает ли IE неправильным или правильным? Это известная ошибка?
EDIT: это, похоже, не возникает при создании экземпляра регулярного выражения с помощью конструктора вместо литерала. Например. new RegExp('ABC','g');
... Тем не менее, литерал должен (теоретически) работать, не так ли?
Это мое предположение слишком ... Еще странно ... – James
@JP: На самом деле это не так странно, вы никогда не использовали ключевое слово 'new'. – Chris
Странно, что если вы вызовете один и тот же код в функции несколько раз, он вернет правильный вывод. Похоже, что он некорректно оптимизирует некоторые назначения при последующих вызовах одной и той же функции. –