我知道有一些正则表达式/ lastIndex差异,但这个对我来说是新的!
预期的行为:显然,创建一个新的正则表达式(使用文字/构造函数)将创建一个lastIndex属性设置为零的新RegExp对象.
实际行为 :(在FF,Chrome中):lastIndex属性似乎通过多个RegExp创建持久存在.
例如
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');
Run Code Online (Sandbox Code Playgroud)
正在为每个函数调用创建一个新的RegExp对象(对吗?),为什么以下内容被写入文档? -
0
3
6
Run Code Online (Sandbox Code Playgroud)
???
注意,这种奇怪现象似乎发生在FF(3)和Chrome(2)中,但奇怪的是不是IE.
这是预期的行为吗?IE是错误的还是对的?这是一个众所周知的错误吗?
编辑:当使用构造函数而不是文字实例化正则表达式时,似乎不会发生这种情况.例如new RegExp('ABC','g');......但是,文字应该(理论上)起作用,对吧?