我知道有一些正则表达式/lastIndex
的差异,但这个是新的!
期望行为:创建一个新的正则表达式(使用文字/构造函数)将会创建一个新的RegExp对象,并将lastIndex
属性设置为零。
实际行为:(在Firefox和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');
请查看这里:http://jsbin.com/otoze
每次函数调用都会创建一个新的RegExp对象(是吗?),那么为什么下面的内容会被写入文档中?? -
0
3
6
注意,这种奇怪的现象似乎只发生在Firefox(3)和Chrome(2)中,但是令人好奇的是IE没有出现这种情况。
这是预期行为吗?IE是对的还是错的?这是一个众所周知的错误吗?
编辑:当使用构造函数而不是字面量实例化正则表达式时,似乎不会发生这种情况。例如:new RegExp('ABC','g');
... 不过,理论上字面量应该也能工作,对吧?
new
关键字。 - Chris