2009-06-11 12 views
13

JavascriptにPHPのpreg_match_allと同等のものはありますか?そうでない場合は、正規表現のすべてのマッチを配列にする最良の方法は何でしょうか?私はJSライブラリを使いやすくしています。preg_match_all JS相当ですか?

答えて

18

あなたはグローバル修飾子とmatchを使用することができます。

>>> '1 2 3 4'.match(/\d/g); 
["1", "2", "3", "4"] 
+1

私はその構文を理解していませんでした。 – erm3nda

+0

@ erm3nda私は思っています**/\ d/g **あなたは理解できませんでした。ここでは[Javascriptで正規表現を作成する](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions)です。 –

10

ジョンResig氏は、それがコールバックをとる関数を、交換してくださいJavaScriptの者を使用して動作します「Search and dont replace

と呼ばれる彼のブログに大きな技術について書かれています元のコンテンツを変更せずにそのまま残すために何も返しません。

グローバルなマッチを使用し、結果の配列を繰り返し処理するよりも、特に複数のグループをキャプチャしている場合に比べて、これはほんの少し前になります。

1

JSのPHPのpreg_match_allと同等の方が、exec()関数を使用することになります。これによりグループを捕捉することもできますが、match()でそれを行うことはできません。あなたは、変数のmyStringから括弧内のすべての時間と回数をキャプチャしたい例えば

var myString = "10:30 am (15 left)11:00 am (15 left)11:30 am"; 
var pattern = /(\d{1,2}:\d{1,2}\s?[ap]m)\s\((\d+)/gi; 
var match; 
while (match = pattern.exec(myString)){ 
    console.log('Match: "' + match[0] + '" first group: -> "' + match[1] + '" second group -> ' + match[2]); 
} 

出力は次のようになります。

Match: "10:30 am (15" first group: -> "10:30 am" second group -> 15 
Match: "11:00 am (15" first group: -> "11:00 am" second group -> 15