正则表达式测试可以';t判断正确与否(JavaScript)
我在Chrome(开发者工具)和Firefox(Firebug)中都有这种行为。注:正则表达式测试返回交替的真/假值:正则表达式测试可以';t判断正确与否(JavaScript),javascript,regex,Javascript,Regex,我在Chrome(开发者工具)和Firefox(Firebug)中都有这种行为。注:正则表达式测试返回交替的真/假值: > var re = /.*?\bbl.*\bgr.*/gi; undefined > re /.*?\\bbl.*\\bgr.*/gi > re.test("Blue-Green"); true > re.test("Blue-Green"); false > re.test("Blue-Green"); true > re.test("B
> var re = /.*?\bbl.*\bgr.*/gi;
undefined
> re
/.*?\\bbl.*\\bgr.*/gi
> re.test("Blue-Green");
true
> re.test("Blue-Green");
false
> re.test("Blue-Green");
true
> re.test("Blue-Green");
false
但是,将同一个正则表达式作为文本进行测试:
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
我无法解释这一点,这使得调试非常困难。有人能解释这种行为吗?/g
(全局)regexps会这样做,是的
看
编写文本时,每次都会得到一个新的regexp对象,因此会丢失与旧对象关联的
lastIndex
状态。Funky。复制了Firefox 3.5.8和Firebug 1.5.3。如果将“蓝绿色”存储到变量中并重复使用,仍然会发生。我觉得这有点有趣。而不是使用a=!要在真/假之间切换,为什么不定义一个私有regexp对象并使用regexp.test代码>它在ECMAScript规范中定义为这样的行为,在所有浏览器中都是一样的。如果不使用/g Edit,则停止:啊,答案说明原因;)JavaScriptRegExp
接口没有任何意义!真正的WTF是全局RegExp
构造函数对象上反映上次匹配的属性。。。啊。