13

打开浏览器控制台并执行以下代码:

var foo = /foo/g;

然后,

foo.test("foo") // true

然后,

foo.test("foo") // false

如果您继续执行 foo.test("foo"),您将看到交替的真/假响应,就好像 var foo 实际上正在被修改一样。

有谁知道为什么会这样?

4

2 回答 2

15

是的,当正则表达式是全局的时,这就是它的.test()工作.exec()方式g。他们在最后一场比赛结束时开始。

.lastIndex您可以使用该属性观察正则表达式对象上的当前最后一个索引。

这是一个可写属性,因此您可以将其重置为何0时/如果需要。当运行正则表达式但未找到匹配项时,它会自动重置为0.

于 2013-03-07T16:46:51.390 回答
1

正则表达式保留最后一个测试的位置。这允许搜索长字符串。您可以通过设置 lastIndex = 0 来重置它;

于 2013-03-07T16:48:28.670 回答