简体   繁体   English

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

[英]Using JS/jQuery to do string search/fuzzy matching?

entirely in JS, no server backend. 完全在JS中,没有服务器后端。 I need to allow the user to search and then show a list of matched names. 我需要允许用户搜索,然后显示匹配名称列表。 I'm using jQuery UI AutoComplete but need some JS to filter the results. 我正在使用jQuery UI AutoComplete,但需要一些JS来过滤结果。

Given an Array of names: 给定一个名称数组:

Bob Hope
James Jones
Steve Jobs
Larry McBridge

Given a search term like Bo 鉴于像Bo这样的搜索词

How can I get just Bob Hope to return 我怎么才能让Bob Hope回归

Given a Search term like b: 给出像b这样的搜索词:

How can I get all but James Jones? 除了詹姆斯·琼斯,我怎能得到所有人?

Any simple JS for comparing two strings? 用于比较两个字符串的简单JS? Thanks 谢谢

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

Maybe I misunderstood you (given the complexity of the above answer), but I came up with this which uses jQuery. 也许我误解了你(考虑到上面答案的复杂性),但我想出了使用jQuery的这个 Every time a key is pressed (when the input has focus), it searches all li elements on the page and finds whether they contain the search term. 每次按下某个键(当输入具有焦点时),它将搜索页面上的所有li元素并查找它们是否包含搜索词。

Here is the HTML: 这是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" />

And here is your jQuery: 这是你的jQuery:

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

Using Ivan's answer, but with ES6 changes: 使用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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM