2012-07-27 100 views
0

在JavaScript这个正则表达式正则表达式测试

var foo = RegExp("^https?:\/\/(\w+\.)*youtube\.([a-zA-Z0-9])+"); 

会匹配字符串:下面的语句返回true]

foo.test("http://www.youtube.com"); 
foo.test("https://www.youtube.com"); 
foo.test("http://youtube.com"); 

但如果表达的是同一个测试失败:

var foo_fail = RegExp("^https?:\/\/(\w+\.)*youtube\.\w+"); 

此RegExp应该已通过上述测试,但我看到: foo_fail.test(“http:// www.youtube.com“);在Chrome/Firebug控制台上返回false。这应该是真实的。这个表达有什么不对?

如果在perl上运行,类似表达式会返回预期的成功匹配。

+0

别你想在最后一个“w”之前使用'“^ https?:\/\ /(\ w + \。)* youtube \。(\ w)+”'带反斜杠吗?另一个区别是'\ w'周围缺少的捕获组。 '\ w'也应该允许使用下划线,也可以使用非拉丁字符,所以你的正则表达式不是等价的。 – amon 2012-07-27 23:25:14

+1

@amon:缺少捕获组?它用于'test',所以没有区别。 – Ryan 2012-07-27 23:28:03

+0

谢谢。我仍然得到测试失败。我修改了这个问题。 – user1558887 2012-07-28 00:22:28

回答

5

你缺少一个反斜杠w前:

\.\w+ 

此外,对于静态正则表达式,从未使用[new] RegExp()语法,而是正则表达式文字:

var foo = /^https?:\/\/(\w+\.)*youtube\.\w+/; 
+0

我仍然看到测试失败。我编辑了原始问题。 – user1558887 2012-07-28 00:21:42

+0

@ user1558887:请接受我的第二条建议。目前的问题是,由于你在一个字符串内,所以逃脱的字符只是简单地将其反斜杠去掉。使用正则表达式。 – Ryan 2012-07-28 00:28:48

+0

谢谢。这工作。 var foo_fail = RegExp(“^ https?:\/\ /(\ w + \。)* youtube \。\\ w +”); – user1558887 2012-07-28 00:45:45