2012-07-27 154 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