我正在用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为什么测试在true和false之间交替?ind是我的RegEx -我是这样设置的:
case "datetime" : ind = new RegExp("d","g");break;更新
所以我已经解决了我的问题,将我的声明改为
ind = /d/;ie省略全局修饰符。我想那是
ind = RegExp("d");也同样有效。
然而,问题仍然存在。为什么全局修饰符导致test在true和false之间切换?
发布于 2010-11-17 17:45:12
与exec (或与exec结合使用)一样,在同一全局正则表达式实例上多次调用
将超过前一次匹配。
来源:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/test
因此,这里实际发生的情况是,由于您对正则表达式使用了全局选项,因此在找到匹配后,它将继续搜索字符串。
ind.test("d")这将在位置0处找到d。
ind.test("d")这将搜索从位置1开始的d,但由于这是字符串的末尾,它将找不到任何内容,因此返回false。
我们可以使用正则表达式的lastIndex属性来证明:
ind.lastIndex
>> 0
ind.test("d")
>> true
ind.lastIndex
>> 1
ind.test("d")
>> false发布于 2010-11-17 17:51:52
调用re.test(str)等效于re.exec(str) != null (参见specification of RegExp.prototype.test(string))。
在带有g修饰符的正则表达式上重复调用exec时,搜索不是从字符串的开头开始,而是从上一次搜索结束的位置开始(lastIndex,使用0初始化):
如果您的正则表达式使用"
g“标志,则可以多次使用exec方法在同一字符串中查找连续的匹配项。执行此操作时,搜索将从正则表达式的lastIndex属性指定的str的子字符串开始(test还将推进lastIndex属性)。
这就是为什么你会得到这个奇怪的结果。
https://stackoverflow.com/questions/4202947
复制相似问题