bugfix> regex > 投稿

次のような文字列をキャッチできるようにしたいと思います。

検索フィールドへのユーザー入力:

Grey box

また、リストには次のものと一致する必要があります。

Grey Boxing Gloves
Grey Window Box
Box with Grey Paint

これは一致しないはずです:

Greater boxing gloves

試み:

(?=.*\b\w*\b).+

回答 1 件
  • 1つの方法は、ポジティブな先読みを使用することです。文字を消費しないため、順序は関係ありません。検索対象のクエリが Grey box の場合  正規表現は次のようになります。

    ^(?=.*Grey)(?=.*box)
    
    

    コードスニペットを作成して、その中の単語の数に関係なく正規表現を作成しました。ただし、注意してください、クエリは正規表現で使用される前にフィルタリング/引用プロセスを渡す必要があります:

    var query = "Grey box";
    var list = ['Grey Boxing Gloves',
    'Grey Window Box',
    'Box with Grey Paint',
    'Greater boxing gloves']
    // You should filter `query` before building regex
    var re = '^(?=.*' + query.split(/\s+/).join(')(?=.*') + ')';
    list.forEach(function(x){
       if (x.match(new RegExp(re, 'i'))) {
          console.log(x);
       }
    })
    
    

あなたの答え