0

ユーザーがテキストボックスに入力する文字列の一致するパターンを見つけようとしています。ほとんどの場合、コードで成功しましたが、場合によっては見つかりましたが、必要な結果がすべて返されません。その動作を示すためにjsfiddleリンクを添付しています。将来の参照用にコードも貼り付けます

http://jsfiddle.net/faphf/2/

$("#facetSearchBox").live("keyup",
    function() {
        $("#test").empty();
        facetSearch();
    });



 function facetSearch(){ 
 var facetSearchTerm = $("#facetSearchBox").val();
 facetSearchTerm = facetSearchTerm.toLowerCase();
 var inputArray=["mark zuckerberg","ben s bernanke","ben bernanke","sven grundberg",    "michael bloomberg","robert powell","kenneth lieberthal","frank boulben"];

  var re = new RegExp(facetSearchTerm, "ig");
  var outputArray = inputArray.filter(function(item) {
     return re.test(item);
});
for(var k=0; k<outputArray.length;k++){
$("#test").append(outputArray[k] + "<br>" );
}
}

ベンを検索してみてください。目的の結果がすべて返されるわけではありません...コードの何が問題なのか教えていただければ助かります。

4

2 に答える 2

4

g正規表現からグローバル修飾子を削除します。その後はうまくいくはずです。

var re = new RegExp(facetSearchTerm, "i");

リンクのテスト: http://jsfiddle.net/faphf/5/

編集:

Javascriptでグローバルフラグを使用したRegExpが間違った結果をもたらすのはなぜですか?

于 2012-12-18T06:06:13.117 に答える
1

使用する:

 var re = new RegExp( facetSearchTerm, "i");

参照:フィドル

単語境界一致の場合:

 var re = new RegExp("\\b" + facetSearchTerm, "i");

参照:フィドル

于 2012-12-18T06:08:55.177 に答える