我正在开发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)
所以我通过改变我的声明解决了我的问题
ind = /d/;
Run Code Online (Sandbox Code Playgroud)
即省略全局修饰符.我想
ind = RegExp("d");
Run Code Online (Sandbox Code Playgroud)
也会同样有效.
问题仍然存在.为什么全局修饰符导致test在true和false之间交替?
与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)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |