2011-08-13 19 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) 

は、2つの数字、スペース、ダッシュ、およびスペースで始まる文字列にマッチを拘束し、次にいずれかの「??」、「10」、または「0」に続きます数字で

1

正規表現のこの部分は、(\?\?|10|0\d)(\?\?|10|\d\d)に変更する必要があります。ゼロは\ dに変更されます。最初の文字列の文字列の一部は01で、2番目の文字列は12で正規表現と一致しません。

関連する問題