Jquery自动完成匹配字符串中的多个无序单词

我试图显示输入的搜索词的最佳匹配。例如

现在Jquery没有给我预期的效果。 当我输入: 今天一个自动完成将显示任何内容,但如果我输入一天 ,它将显示以该顺序中的这两个单词开头的搜索结果。 我想今天出现一天是今天的第一天和最后一天 。 我想要显示搜索结果中包含这些单词的顺序并不重要。 我在这里看了一下,发现没有这样的东西,看起来像是一种常见的搜索方法,我看不出为什么没有人问过这个问题。 是否有内置的方法来处理这个?

    jQuery UI Autocomplete - Default functionality      $(function() { var availableTags = [ "one day is the first and last today" , "tuesday is today" , "one" , "one day is tomorrow" ]; $( "#tags" ).autocomplete({ source: availableTags, multiple: true, mustMatch: false }); });    

尝试覆盖auto complete提供的默认filter逻辑。

 // Overrides the default autocomplete filter function to search for matched on atleast 1 word in each of the input term's words $.ui.autocomplete.filter = function (array, terms) { arrayOfTerms = terms.split(" "); var term = $.map(arrayOfTerms, function (tm) { return $.ui.autocomplete.escapeRegex(tm); }).join('|'); var matcher = new RegExp("\\b" + term, "i"); return $.grep(array, function (value) { return matcher.test(value.label || value.value || value); }); }; 

小提琴

或者创建自己的filter函数并处理搜索的返回,从而保持完整的filterfunction。

 function customFilter(array, terms) { arrayOfTerms = terms.split(" "); var term = $.map(arrayOfTerms, function (tm) { return $.ui.autocomplete.escapeRegex(tm); }).join('|'); var matcher = new RegExp("\\b" + term, "i"); return $.grep(array, function (value) { return matcher.test(value.label || value.value || value); }); }; $("#tags").autocomplete({ source: availableTags, multiple: true, mustMatch: false ,source: function (request, response) { response(customFilter( availableTags, request.term)); }, }); 

小提琴