gpt4 book ai didi

Javascript 正则表达式每隔一次调用就会失败

转载 作者:可可西里 更新时间:2023-11-01 01:45:58 25 4
gpt4 key购买 nike

我正在使用以下 Javascript 从文本文件中读取字符串并使用正则表达式处理它们

while (!textFile.AtEndOfStream)
{
currLine = textFile.ReadLine();
match = re.exec(currLine);
do stuff with match
}

我遇到的问题是每次调用 re.exec 时都会失败并返回 null;所以第一行处理正确,但第二行结果为空,然后第三行有效,第四行结果为空。

我可以使用下面的代码得到我想要的结果

while (!textFile.AtEndOfStream)
{
currLine = textFile.ReadLine();
match = re.exec(currLine);
if (match == null) match = re.exec(currLine);
}

但这似乎有点令人讨厌。谁能告诉我为什么会发生这种情况以及我可以做些什么来正确修复它?

最佳答案

您的 re 是使用“global”修饰符定义的,例如。类似于 /foo/g

当 RegExp 是全局的时,它在 RegExp 实例本身中保留隐藏状态以记住它匹配的最后一个位置。下次搜索时,它会从上次匹配结束的索引开始向前搜索,并从那里找到下一次匹配。如果您将 不同 字符串传递给上次传递的字符串,这将产生高度不可预测的结果!

当您使用 g 局部正则表达式时,您应该通过重复调用它们来耗尽它们,直到得到 null。然后下次使用它时,您将再次从字符串的开头开始匹配。或者,您可以显式设置 re.lastIndex0 之前使用一个。如果您只想测试是否存在一个匹配项,如本例所示,最简单的方法就是不使用 g

JS RegExp 接口(interface)是该语言中最令人困惑、设计最差的部分之一。 (这是 JavaScript,所以说了很多。)

关于Javascript 正则表达式每隔一次调用就会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811890/

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