Regex'es做Regex.exec时的奇怪行为(testString)

时间:2015-01-23 13:30:30

标签: javascript regex google-chrome

我可以知道为什么以下陈述会发生以下奇怪的行为吗?

a = /\d+/gi
outputs `/\d+/gi`
a.exec('test1323')
outputs `["1323"]`

并再次运行相同的语句给出     a.exec(' test1323&#39)

  

即使我尝试使用新的正则表达式创建正则表达式("正则表达式字符串"),但仍然没有变化。

请参阅附件enter image description here

它发生在chrome控制台中。

1 个答案:

答案 0 :(得分:1)

您正在使用g标志创建正则表达式。执行此操作时,exec方法会记住上次匹配的位置,并从最后一次匹配开始匹配。结果解释如下:

> a = /\d+/gi
< /\d+/gi  // a.lastIndex is initialized to 0
> a.exec("test1323")
< ["1323"] // match begins at 0, match found at index 4...7, a.lastIndex is now 8
> a.exec("test1323")
< null     // match begins at 8, no match found, a.lastIndex is reset to 0
> a.exec("test1323")
< ["1323"] // match begins at 0, match found at index 4...7, a.lastIndex is now 8

类似问题can be found in this answer的长时间干旱。