Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常javascript正则表达式结果,请解释!_Javascript_Regex - Fatal编程技术网

异常javascript正则表达式结果,请解释!

异常javascript正则表达式结果,请解释!,javascript,regex,Javascript,Regex,我正在VS2005中开发,在我的页面中有一些JS代码。我在遇到问题的特定循环中设置了断点。这是我与IDE的一次小对话-- 为什么测试在正确和错误之间交替ind是我的正则表达式-我这样设置它: case "datetime" : ind = new RegExp("d","g");break; 使现代化 所以我把我的声明改为 ind = /d/; 即省略全局修饰符。我想 ind = RegExp("d"); 也同样有效 但问题仍然存在。为什么全局修饰符导致测试在true和false之间交替

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

为什么测试在正确和错误之间交替
ind
是我的正则表达式-我这样设置它:

case "datetime" : ind = new RegExp("d","g");break;
使现代化 所以我把我的声明改为

ind = /d/;
即省略全局修饰符。我想

ind = RegExp("d");
也同样有效

但问题仍然存在。为什么全局修饰符导致
测试
在true和false之间交替

与exec一样(或与exec结合使用) 它)在上多次调用测试 同一全局正则表达式 实例将通过 上一场比赛

资料来源:

因此,这里的实际情况是,由于您对正则表达式使用了全局选项,因此它将在找到匹配项后继续搜索字符串

ind.test("d")
这将在位置0处找到d

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

ind.test("d")
我们可以使用正则表达式的
lastIndex
属性来证明:

ind.lastIndex
>> 0
ind.test("d")
>> true
ind.lastIndex
>> 1
ind.test("d")
>> false
与exec一样(或与exec结合使用) 它)在上多次调用测试 同一全局正则表达式 实例将通过 上一场比赛

资料来源:

因此,这里的实际情况是,由于您对正则表达式使用了全局选项,因此它将在找到匹配项后继续搜索字符串

ind.test("d")
这将在位置0处找到d

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

ind.test("d")
我们可以使用正则表达式的
lastIndex
属性来证明:

ind.lastIndex
>> 0
ind.test("d")
>> true
ind.lastIndex
>> 1
ind.test("d")
>> false
调用
re.test(str)
相当于
re.exec(str)!=空
(请参阅)

当反复调用带有g修饰符的正则表达式时,搜索不会从字符串的开头开始,而是从上一次搜索结束的位置开始(
lastIndex
,初始化为
0
):

如果正则表达式使用“
g
”标志,则可以多次使用
exec
方法来查找同一字符串中的连续匹配项。执行此操作时,搜索从正则表达式的
lastIndex
属性指定的
str
子字符串开始(
test
也将推进
lastIndex
属性)

这就是为什么会得到这个奇怪的结果。

调用
re.test(str)
相当于
re.exec(str)!=空
(请参阅)

当反复调用带有g修饰符的正则表达式时,搜索不会从字符串的开头开始,而是从上一次搜索结束的位置开始(
lastIndex
,初始化为
0
):

如果正则表达式使用“
g
”标志,则可以多次使用
exec
方法来查找同一字符串中的连续匹配项。执行此操作时,搜索从正则表达式的
lastIndex
属性指定的
str
子字符串开始(
test
也将推进
lastIndex
属性)


这就是为什么你会得到这个奇怪的结果。

+1我刚写这篇文章时,我注意到有人已经回答了:)+1我刚写这篇文章时,我注意到有人已经回答了:)