从元素列表中查找匹配的模式

时间:2012-12-18 06:00:09

标签: javascript jquery regex

我正在尝试找到用户输入到文本框中的字符串的匹配模式,我在大多数情况下使用我的代码成功使用代码,但在某些情况下我发现,它不会返回所有需要的结果。我附加了一个jsfiddle链接来显示它的wrking,我还将粘贴代码以供将来参考

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>" );
}
}

尝试搜索ben,它不会返回所有期望的结果...如果您可以帮我告诉代码有什么问题会有帮助吗?

2 个答案:

答案 0 :(得分:4)

从正则表达式中删除全局修饰符g。之后它应该可以正常工作。

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

测试链接:http://jsfiddle.net/faphf/5/

修改

Why RegExp with global flag in Javascript give wrong results?

答案 1 :(得分:1)

使用:

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

请参阅:fiddle

对于字边界匹配:

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

请参阅:fiddle