gpt4 book ai didi

javascript - 正则表达式/lastIndex - 意外行为

转载 作者:数据小太阳 更新时间:2023-10-29 06:13:54 27 4
gpt4 key购买 nike

我知道有一些正则表达式/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');

参见此处: http://jsbin.com/otoze


每次函数调用都会创建一个新的 RegExp 对象(对吗?),那么为什么要将以下内容写入文档? -

0
3
6

???

请注意,这种奇怪现象似乎发生在 FF(3) 和 Chrome(2) 中,但奇怪的是 IE 却没有。

这是预期的行为,IE 是错误的还是正确的?这是一个众所周知的错误吗?


编辑:当使用构造函数而不是文字实例化正则表达式时,这似乎不会发生。例如。 new RegExp('ABC','g'); ... 不过,文字应该(理论上)有效,对吧?

最佳答案

var regex = new RegExp("ABC", "g"); 没有那个问题,所以我猜 /ABC/g 重新使用了 regexp对象。

编辑:显然,根据 ECMAScript 3.0 规范这是正确的行为,它已在 ECMAScript 3.1 中修复 - details

关于javascript - 正则表达式/lastIndex - 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1534098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com