gpt4 book ai didi

javascript - 正则表达式连续循环而不终止以查找匹配项

转载 作者:行者123 更新时间:2023-12-01 00:59:39 24 4
gpt4 key购买 nike

我需要找到匹配的位置,我已经尝试过

function myFunction() {
var myvar_thru_textbox="u?"

var ptrn = new RegExp(myvar_thru_textbox, "gim");

var match;

while ((match = ptrn.exec("color colour")) != null) {
console.log(JSON.stringify(match));
}

}

此代码使用字符串“”生成无限输出

当模式更改为“ou?”时它产生了正确的输出,为什么?如果前面有一个字符,字符会变成无穷大?

我期望只有当“u?”时才会产生“”或“u”使用正则表达式。

最佳答案

根据documentation ,

JavaScript RegExp objects are stateful when they have the global or sticky flags set (e.g. /foo/g or /foo/y). They store a lastIndex from the previous match.

...

If the match succeeds, the exec() method returns an array and updates the lastIndex property of the regular expression object.

现在想象一下第一次迭代时会发生什么。正则表达式在索引 0 处找到零宽度匹配,因此将 lastIndex 设置为 0。然后在第二次迭代中,它从 0 开始搜索,找到另一个零宽度匹配,因此将其设置lastIndex 再次变为 0。如此循环下去。

因此,您应该在那里放置一个 if 语句来检查匹配是否为零宽度。如果是,请增加最后一个索引,这样它就不会再次为您提供相同的匹配项。

function myFunction() {
var ptrn = new RegExp("u?", "gim");

var match;
var i = 0;

while ((match = ptrn.exec("color colour")) != null) {
console.log(JSON.stringify(match));
if (match.index == ptrn.lastIndex) {
ptrn.lastIndex++;
}

}

}
myFunction()

关于javascript - 正则表达式连续循环而不终止以查找匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56205735/

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