2012-03-07 7 views
2

私はRegExpの新機能です。ここに私の問題があります。私は入力値を持っています。その入力値にRegExpの「ルール」を適用します。ルールは入力値で始まり、大文字と小文字は区別されません。例を挙げてみましょう。私の参照文字列はParis (75018)で、入力値はPariです。そのシナリオでは、すべてが正常に動作しています。しかし、入力値がParis (7であれば動作しません。その場合、「システム」は私にマッチがないと言っていて、私はそれを手に入れません。それは一致しています!誰かが助けることを願っています。あなたの返信を先にありがとう。乾杯。マークjQuery - RegEx working bizarrely

http://jsfiddle.net/JU8Va/

私のhtml:

<input id="btn" type="submit" />​ 

マイJS:

$('#btn').click(function() { 
    var loc = "Paris"; //input value... 
    var locRegExp = new RegExp("^" + loc, "i"); // 

    var test = "Paris (75018)"; //reference value 

    if (test.match(locRegExp)) { 
     alert('matches'); 
     } 
     else { 
      alert('does not match'); 
     } 
    });​ 

答えて

3

問題が(では、正規表現で特別な意味を持っています。文字通りそれを得るには、\(と逃げなければなりません。ここを参照してください:二重のバックスラッシュがあることがhttp://jsfiddle.net/JU8Va/1/

var loc = "Paris \\(7"; 
var locRegExp = new RegExp("^" + loc, "i"); 

注意を。これはバックスラッシュ自体が引用符で囲まれた文字列で特別な意味を持つため、バックスラッシュをエスケープして文字通り正規表現で取得する必要があるからです。

リテラル(引用符で囲まれていない)正規表現では、カッコだけをバックスラッシュでエスケープする必要はありません。たとえば、test.match(/Paris \(7/)です。

正規表現では、エスケープされていない(は、「キャプチャグループを開始する」ことを意味します。キャプチャグループは、実行後に一致するデータを取得する方法です。あなたが含まれています何loc前もって分からない場合は、このようなエスケープバージョンと括弧のすべてのインスタンスを置き換えることができ、http://www.regular-expressions.info/brackets.html

:どのようにそれらの仕事についての回答は、ここを参照してください

var locRegExp = new RegExp("^" + loc.replace(/\(/g, "\\(").replace(/\)/g, "\\)"), "i"); 

しかし、テストする必要のある括弧の他に、多くの特殊文字があることに注意してください。多くの文字を置き換えることができたら、別の方法を試してみてください。たとえば、テスト文字列の先頭から始まる大文字小文字を区別しない検索を探しているだけですか?そのためには正規表現は必要ありません。部分文字列検索を行うことができます:

test.toLowerCase().indexOf(loc.toLowerCase()) === 0 
+1

こんにちはベン私を助けるために時間を取るのおかげでルールを適用することが可能です正規表現を使用するかプログラムで行うか – Marc

+0

@Marc、 "ルール"の意味を理解できない –

+0

スラッシュを自動的に追加することは可能ですか? – Marc

1

正規表現で使用される特殊文字をエスケープする必要があります。あなたの例では(がその文字です。

1

エスケープパターンがあるべき特殊な文字で、エスケープする必要があります「(」からです:。。。

Paris \(7