2012-02-08 10 views
1

私は大きなJavaScriptの配列、5000程度のエントリがあります。すべての配列項目に対して合理的に実行可能な方法でRegExpの一致を実行するために、私はexecをループしてグループを取り出さない方がよいでしょう。私は、より速くなるようにexecをグループ化しないでマッチングを見つけました。javascriptの正規表現、グループや肯定的なlookbehindなしで一致

は、何の正の後読みの操作を持っていない、それは標準の正規表現のツールキットを使用して偽陽性を押すことなく、次の値と一致する数値のみをとることができますか?

// the value to be matched 
    var reference_field = ',1,3,8,123,'; 
    // a series of reference id to match 
    var re = /(?:3|8)(?=,)/g; 
    reference_field.match(re); 
    // result, note that the second three was not intended --> ["3", "8", "3"] 

アレイの長さがそれほど長くない場合は、番号をグループ化するだけです。

// the value to be matched 
    var reference_field = ',1,3,8,123,'; 
    // a series of reference id to match 
    var re = /,(3|8)(?=,)/g; 
    var match; 
    while(match = re.exec(reference_field)){ 
     if (match == null) {break;} 
     // do something with match[1] 
    } 

...しかし、私はモバイルがターゲットプラットフォームであるため、スピードに敏感です。私は正規表現トリッキーを欠いているのか、それともグループ化しないとできないのでしょうか?すべてのjavascriptのポジティブな検索ビヘイビアの選択肢は機能しません(カンマで否定的な先読み)、または追加の処理オーバーヘッドを導入します。

答えて

0

\bシーケンスは、あなたのために働くことができます - 単語の境界、単語の始めと終わりの両方に一致します。あなたは、文字列は、常にこれらのカンマで区切られた番号リストを知っている場合、これは適切なマッチを見つけるだろう:

/\b(?:3|8)\b/g 

またreference_fieldの開始時と終了時に余分なカンマを必要としません。

+0

実際に!ありがとう。 – pragmar

関連する問題