gpt4 book ai didi

多次使用/g 的 Javascript 正则表达式文字

转载 作者:行者123 更新时间:2023-12-03 13:22:19 25 4
gpt4 key购买 nike

我在使用 Javascript Regexp.exec 函数时遇到了一个奇怪的问题。在新的(我猜......)正则表达式对象上多次调用该函数时,它每两次工作一次。我完全不明白为什么!

这是一个小循环示例,但在函数中使用一次并多次调用时,它会做同样的事情。

for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/g).exec('abc'));
}

> 0 ["b", "b"]
> 1 null
> 2 ["b", "b"]
> 3 null
> 4 ["b", "b"]

删除/g 后,它恢复正常。
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/).exec('abc'));
} /* no g ^ */

> 0 ["b", "b"]
> 1 ["b", "b"]
> 2 ["b", "b"]
> 3 ["b", "b"]
> 4 ["b", "b"]

我猜有一个优化,保存了正则表达式对象,但看起来很奇怪。

这种行为在 Chrome 4 和 Firefox 3.6 上是相同的,但它在 IE8 中的工作方式与 (I) 一样。我相信这是有意的,但我找不到其中的逻辑,也许你能帮助我!

谢谢

最佳答案

如果您仍然要重用相同的正则表达式,请将其从循环中取出并显式重置它:

var pattern = /(b)/g;
for (var i = 0; i < 5; ++i) {
pattern.lastIndex = 0;
console.log(i + ' ' + pattern.exec("abc"));
}

关于多次使用/g 的 Javascript 正则表达式文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2141974/

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