使用JS / jQuery进行字符串搜索/模糊匹配?

时间:2011-10-30 23:34:25

标签: javascript jquery

完全在JS中,没有服务器后端。我需要允许用户搜索,然后显示匹配名称列表。我正在使用jQuery UI AutoComplete,但需要一些JS来过滤结果。

给出一个名字数组:

Bob Hope
James Jones
Steve Jobs
Larry McBridge

给出像Bo这样的搜索词。

我怎样才能让Bob Hope回归

给出像b这样的搜索词:

除了詹姆斯琼斯,我怎能得到所有人?

用于比较两个字符串的简单JS?感谢

3 个答案:

答案 0 :(得分:8)

var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"]   
var query = "bo"
var results = $(names)
        .map(function(i,v){ 
            if(v.toLowerCase().indexOf(query.toLowerCase())!=-1){return v} 
        }).get()

// results is ["Bob Hope"]

答案 1 :(得分:2)

也许我误解了你(考虑到上述答案的复杂性),但我提出了使用jQuery的this。每次按下某个键(当输入具有焦点时),它将搜索页面上的所有li元素,并查找它们是否包含搜索词。

这是HTML:

<ul><li>Bob Hope</li>
<li>James Jones</li>
<li>Steve Jobs</li>
<li>Larry McBridge</li></ul><br>
Search: <input id="search" length="24" />

这是你的jQuery:

$("#search").keyup(function(){
    $("li").hide();
   var term = $(this).val();
    $("li:contains('" + term + "')").show();
}); 

答案 2 :(得分:0)

使用Ivan的答案,但改变了ES6:

var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"];

function findIn(s, list){
    return list.filter((v) => v.toLowerCase().indexOf(s.toLowerCase()) != -1 );
}


findIn('bo', names);
相关问题