示例代码
这与宣传的一样:
var re = /abc/;
re.test("abc");
//true
!re.test("abc");
//false;
这不是:
var re2 = /abc/g;
//undefined
re2.test("abc");
//true
!re2.test("abc");
//true
是什么给出了?
我已经使用多个正则表达式对其进行了测试,似乎/g
标志使所有!
都返回true。
如果有帮助,我正在使用Chrome 34。
答案 0 :(得分:3)
每当您想知道是否在a中找到模式时,请使用test() string(类似于String.search方法);欲获得更多信息 (但执行速度较慢)使用exec方法(类似于 String.match方法)。与exec(或与其结合)一样,测试 在同一个全局正则表达式实例上多次调用 将超过上一场比赛。
因此,使用g
标志将在每次连续调用时通过字符串移动.test()
超过它找到的每个匹配(与.exec()
相同的行为)。
它通过修改名为lastIndex
的正则表达式本身的属性来完成此操作,该属性告诉下一个.test()
操作,它应该在下次使用正则表达式时使用字符串开始搜索(使用某些方法) 。 g
标志告诉正则表达式使用.lastIndex
属性。没有该标志,则不使用该属性。该属性可以手动设置回0
,但如果您只删除g
标记,那么您不必担心它。
除非您明确尝试使用此功能,否则您可能不希望将g
标记与.test()
一起使用。
答案 1 :(得分:1)
第一次调用re2.test()时,会将名为lastIndex
的指针索引属性移动到re2对象的模式字符串的末尾。第二次调用它时,它将返回false,因为它找不到任何匹配的" abc"在" c"之后模式字符串的字符
每次调用.test()后,您都可以按re2.lastIndex = 0
重置它。因此,第二次调用.test()时,它将从第一个索引
此属性仅适用于" g"修饰符已设置。