2011-08-13 122 views
0

this代碼:爲什麼這場比賽失敗?

var tlTemp=new Array(); 

tlTemp.push("00 - 01:??:?? - TL 1"); 
tlTemp.push("00 - 12:??:?? - TL 2"); 

for(i=0; i<tlTemp.length; i++) { 
    var removedTL = tlTemp[i].match(/^(\d\d) - (\?\?|10|0\d):(\?\?|[0-5]\d):(\?\?|[0-5]\d) - (.*)/); 

    if(removedTL!=null) { 
     alert("ok"); 
    } 
    else 
    { 
     alert("no"); 
     return; 
    } 
} 

,我不明白爲什麼第一個字符串打印OK,第二(如此相似)沒有。爲什麼?

回答

2

定義串的不同部分中的正則表達式的相應的部分是:

(\?\?|10|0\d) 

它匹配:

?? 
10 
0x where x is a digit 

所以12不匹配。

現在,也有TL 2,而不是TL 1,但在正則表達式這被定義爲:

(.*) 

這使得不引起該問題匹配的一切。

1

因爲您的正則表達式明確排除它。

本節:

/^(\d\d) - (\?\?|10|0\d) 

約束匹配爲字符串開始用兩位數字,空格,破折號,和一個空間,然後或者「??」,「10」,或「0」,接着一位數字。

1

正則表達式的這一部分:(\?\?|10|0\d)應更改爲(\?\?|10|\d\d)。零被改爲\ d。在第一個字符串中,該部分字符串爲01,而第二個字符串爲12,與正則表達式不匹配。