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

Using JS/jQuery to do string search/fuzzy matching?

本文关键字:搜索 模糊 字符串 JS jQuery 使用      更新时间:2023-09-26

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

给定一个数组名称:

Bob Hope
James Jones
Steve Jobs
Larry McBridge

给定Bo

这样的搜索词

我怎样才能让鲍勃·霍普回来

给定一个搜索词b:

我怎么能得到除了詹姆斯·琼斯以外的所有人呢?

任何简单的JS比较两个字符串?由于

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"]

也许我误解了你(考虑到上述答案的复杂性),但我想到了这个使用jQuery。每次按下一个键(当输入有焦点时),它都会搜索页面上的所有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();
}); 

使用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);