2012-11-26 18 views
0

我在JavaScript中遇到了一些與我的正則表達式有關的問題。 我有下面的代碼,我認爲應該匹配,但它不。難以讓我的正則表達式匹配

var rgx = new RegExp("{\d+:(\d+)}"); 

if (rgx.test("{0:00000}") == true) { 
    alert("match"); 
} 
else 
{ 
    alert("no match"); 
} 

我不確定我是否應該在這裏使用test()。我真的想在我的正則表達式中捕捉組,但exec()似乎給了我相同的結果。

那麼我做錯了什麼?

+0

您可能需要使用'^'開頭和'$最後,以確保字符串完全匹配而不是子字符串 - 但這取決於你。 – Ian

回答

5

的問題是,你需要逃避你的正則表達式\字符:

var rgx = new RegExp("{\\d+:(\\d+)}"); 

或者,您可以用文字語法:

var rgx = /{\d+:(\d+)}/; 

捕獲結果,你也應該使用.match函數而不是test或exec。如果它不匹配,它將返回null,如果匹配,它將返回至少一個元素的數組。

+1

對於文字語法。 RegExp的構造函數很少需要,並且對所有必要的轉義都感到困惑。 – tjameson

0

沒有與正則表達式的多個問題:

var rgx = new RegExp("{\d+:(\d+)}"); 

第一(第一個由syazdani說明),您必須字符串逃過反斜線:

var rgx = new RegExp("{\\d+:(\\d+)}"); 

或更好的使用正則表達式文字:

var rgx = /{\d+:(\d+)}/ 

其次,{}有特殊的意義正則表達式,並應轉義:

var rgx = /\{\d+:(\d+)\}/ 

第三,由Ian注意,你可能想確保整個字符串匹配:

var rgx = /^\{\d+:(\d+)\}$/ 

RegExp#test返回一個true/false是否該字符串匹配。

RegExp#exec返回數組保存了比賽,所有捕獲的羣體,如果字符串匹配,或者null如果字符串不匹配:

var matches = /\{\d+:(\d+)\}/.exec("{0:000000}"); 
if(matches){ 
    console.log(matches[1]); //logs "000000" 
}