不寻常的javascript正则表达式结果,请说明!

El *_*oco 1 javascript regex

我正在开发VS2005并在我的页面中有一些JS代码.我在一个特定的循环中设置了一个断点,我遇到了一个问题.这是我与IDE的小谈话 -

? ind
/d/g
? ind.test("d")
true
? ind.test("dtn")
false
? ind.test("dtn")
true
? ind.test("dtn")
false
? ind.test("dtn")
true
? ind.test("dtn")
false
Run Code Online (Sandbox Code Playgroud)

为什么测试在真与假之间交替?ind是我的RegEx - 我这样设置:

case "datetime" : ind = new RegExp("d","g");break;
Run Code Online (Sandbox Code Playgroud)

UPDATE

所以我通过改变我的声明解决了我的问题

ind = /d/;
Run Code Online (Sandbox Code Playgroud)

即省略全局修饰符.我想

ind = RegExp("d");
Run Code Online (Sandbox Code Playgroud)

也会同样有效.

问题仍然存在.为什么全局修饰符导致test在true和false之间交替?

Ivo*_*zel 5

与exec(或与其结合)一样,在同一个全局正则表达式实例上多次调用的测试将超过上一个匹配.

资料来源:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/test

那么这里究竟发生了什么,因为你正在使用正则表达式的全局选项,它将在找到匹配后继续搜索字符串.

ind.test("d")
Run Code Online (Sandbox Code Playgroud)

这将在0位置找到d .

ind.test("d")
Run Code Online (Sandbox Code Playgroud)

现在这将从位置1开始搜索d ,但由于这是字符串的结尾,因此它将找不到任何内容,因此返回false.

我们可以使用lastIndex正则表达式的属性来证明:

ind.lastIndex
>> 0
ind.test("d")
>> true
ind.lastIndex
>> 1
ind.test("d")
>> false
Run Code Online (Sandbox Code Playgroud)