相关疑难解决方法(0)

有趣的Javascript RegExp测试

我写了一个Javascript RegExp测试来检测日期字符串格式,我错误地添加了一个冗余的"g"标志,发现了一些有趣的东西.

var s = "2009/03/10";
var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
Run Code Online (Sandbox Code Playgroud)

我得到一个'true'后跟一个'false',然后是另一个'true',然后是另一个'false'.

如果我使用循环来执行它,我发现更有趣的东西,我在IE和Safari中有四个"真实",在FF,Chrome中有真,假,真,假.

for (var i=0; i<4; i++)
{
  var s = "2009/03/10";
  var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
  alert(regex.test(s));
}
Run Code Online (Sandbox Code Playgroud)

有没有人有想法解释为什么Javascript正则表达式会像这样,以及导致浏览器返回不同结果的原因是什么?(与变量声明和生命范围有关?)

javascript regex

8
推荐指数
1
解决办法
2560
查看次数

正则表达式测试不能在true和false之间做出决定(JavaScript)

我在Chrome(开发人员工具)和Firefox(Firebug)中都有这种行为.请注意,正则表达式测试返回交替的true/false值:

> 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
Run Code Online (Sandbox Code Playgroud)

但是,测试相同的正则表达式作为文字:

> /.*?\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
Run Code Online (Sandbox Code Playgroud)

我无法解释这一点,它使调试变得非常困难.谁能解释这种行为?

javascript regex

4
推荐指数
1
解决办法
1259
查看次数

标签 统计

javascript ×2

regex ×2