javascript - 为什么 Regex Javascript//g 标志会影响状态?

标签 javascript regex

<分区>

我有 another question虽然它得到了回答,但我不明白为什么正则表达式会受到影响

来自 w3schools它说

g: Perform a global match (find all matches rather than stopping after the first match)

好的,当然。我明白。这就是为什么我在这段代码中得到一个数组

var str="The rain in SPAIN stays mainly in the plain";
var patt1=/ain/gi;
document.write(str.match(patt1));

输出:

ain,AIN,ain,ain 

Regex 类似,用/g 会替换多个实例。

然而在比赛中

var re=/hi/gi;
alert(re.test("hi") + " " + re.test("hi"));

结果是“真假”。

那么为什么 $%^& 这样做呢?两个测试中的字符串完全相同!过去我认为全局意味着它将搜索换行符(这是我想在这个测试中做的)。我引用的第一件事是关于 g 是全局匹配。

没有任何关于它影响 NEXT CALL 的引用!没有/g 代码将正常工作(我也不需要跨行)。为什么它会影响下一次测试? gumbo 回答提到它会影响跨调用的 lastIndex 以及 %^&* 我不知道有共享状态的内容,因为在我使用 g 标志时其他两个函数没有使用它。我只想要一个 true 和 false,但如果有任何不匹配的东西返回一个包含它在全局范围内找到的匹配数量的 int? (即“hi”中有 1 个,但字符串“hihi”中有 2 个)。

为什么在进行 regex.test 时 g 会影响我的下一次调用?!另外,如果可以的话,请提供我真正需要该“功能”的时间

最佳答案

当您在正则表达式中使用全局标志时,lastIndex 属性会更新。 lastIndex 属性是下一场比赛开始的索引。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

您可以在再次调用之前重置最后一个索引。见

Why RegExp with global flag in Javascript give wrong results?

关于javascript - 为什么 Regex Javascript//g 标志会影响状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873122/

相关文章:

javascript - jquery 中的实时和触发

javascript - 按属性值搜索原型(prototype)

c++ - 如何将更改的行与 C 代码的 git 存储库中的函数相关联?

java - 无法追踪为什么这个正则表达式代码无限运行

javascript - 如何在 JavaScript 中获取渐变颜色的十六进制代码(基于值的 3 种颜色)

javascript - 如果服务器出现故障,如何捕获浏览器抛出的 ERR_CONNECTION_REFUSED?

javascript - Google+ 登录按钮 [类 ='g-signin']

javascript - 替换的字符串在窗口中显示标签

java - 如何取出字符串中的1到3个单词?

regex - 你如何用 sed "debug"一个正则表达式?