2011-10-24 17 views
1

私は非常に奇妙な動作に気付きました。シンプルなスペースがすべてのテストを壊すのはなぜですか?Javascript、正規表現と{n、m}

rePattern = /^([a-z]+[-_]?){2,}[a-z]$/; 
var test = new Array("jhgfg_hfh-g", "jhg-fg_hfhg", "jhg_fg_hfhg", "jhg_fg_hfhg", "jhg_fghfhg"); 
for (var i = 0; i < test.length ; i++) { 
    x = test[i]; 
    alert(i + ' : ' + x + ' : ' + rePattern.test(x)); 
} 

私はfalseなるすべて、その後

// notice {2,} => {2, } with an extra space before } 
rePattern = /^([a-z]+[-_]?){2, }[a-z]$/; 

に上記を変更した場合...

はちょうどここに受け入れ答えを持っているために、Uに

+9

を。正規表現の構文は厳密ですが、ランダムな空白を追加することはできず、無視されることを期待しています。 '{2、}'はリテラル '{2、}'と一致します。 – duri

+3

@duriあなたのコメントは答えです、なぜあなたは答えとして投稿しないのですか? – stema

+0

大丈夫、申し訳ありませんが、私はそれが大丈夫だと確信していました。ちょうどそれをPythonでテストし、あなたもそこにいます... – lctv31

答えて

4

OKを感謝:のためです余分なスペース。正規表現の構文は厳密ですが、ランダムな空白を追加することはできず、無視されることを期待しています。 {2, }はリテラル{2, }にマッチします:

/^x{2, }$/.test('x{2, }') === true 
+0

+1大部分の人は '{}'括弧が文字通りそれらが量指定子の一部でないとすぐに – stema

0

あなたの正規表現does'nt仕事あなたが^正規表現delemitersを使用して$

  • ^がと言うので、あなたがテストした値の開始または終了時にスペースを追加するとき文字列
  • $の先頭にパターンキャッチは、パターンキャッチと言う文字列

の最後に、あなたは、2つのDを組み合わせた場合エリミタ、正規表現はスペースを含むすべてのcaractersに反応します。

だから、パターン、次のいずれかの文字列をキャッチするために、次の正規表現を使用します。明らかに、そのための余分なスペースを

/([a-z]+[-_]?){2,}[a-z]/ 
+0

実際に私はここにはいない...私は最初と最後のアルファを持っていることを確認したかった、私は忘れて^と$私はこの正規表現を受け入れることができる部分と一致するでしょうか? であり、/([a-z] + [ - _]){2、} [a-z] /はこれらも受け入れません。 (2つの区切り文字を組み合わせると、正規表現はスペースを含むすべてのキャラクタに反応します)。デュリ、いや? – lctv31

+0

あなたは私の前の答えは良くないです。私があなたの問題を理解していれば、あなたの文字列が最初と最後にアルファベット文字を持っているかどうかを確認する必要があります。 次の正規表現は、あなたの問題を解決しなければならない: /^([az])+(.)+([az])+$/ – ptiswitz

+0

問題が^^を解決し、私の表現は私の必要性のためにOKだった、唯一の許可[A - ]または-_は連続していません。私のトラブルは実際にはDuriによって説明されたエクストラ空間でした。ありがとう。 – lctv31