首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常的javascript正则表达式结果,请解释!

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

Stack Overflow用户
提问于 2010-11-17 17:13:11
回答 2查看 117关注 0票数 1

我正在用VS2005进行开发,我的页面中有一些JS代码。我在我遇到问题的特定循环期间设置了一个断点。这是我与IDE的简短对话--

代码语言:javascript
复制
? 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 -我是这样设置的:

代码语言:javascript
复制
case "datetime" : ind = new RegExp("d","g");break;

更新

所以我已经解决了我的问题,将我的声明改为

代码语言:javascript
复制
ind = /d/;

ie省略全局修饰符。我想那是

代码语言:javascript
复制
ind = RegExp("d");

也同样有效。

然而,问题仍然存在。为什么全局修饰符导致test在true和false之间切换?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-17 17:45:12

与exec (或与exec结合使用)一样,在同一全局正则表达式实例上多次调用

将超过前一次匹配。

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

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

代码语言:javascript
复制
ind.test("d")

这将在位置0处找到d。

代码语言:javascript
复制
ind.test("d")

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

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

代码语言:javascript
复制
ind.lastIndex
>> 0
ind.test("d")
>> true
ind.lastIndex
>> 1
ind.test("d")
>> false
票数 5
EN

Stack Overflow用户

发布于 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属性)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4202947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档