jQuery 自动完成:如何匹配数组中的 entire/full 个单词
jQuery Autocomplete: How to match entire/full words from array
我有一个自动完成功能,它有多个类别,其值与用户输入的任何一组字母相匹配。每个类别值都存储有多个字符串(请参阅下面的 value.application 示例数据)。
这很好用,但我希望它只匹配整个单词而不是字母组合。如何实现?
示例:
源数据:"all caller tallest"
用户输入:“全部”
Returns: "all caller tallest"
只查找 return: "all"
source: function(request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); // match letters in string
response($.grep(SearchList, function(value) {
return matcher.test(value.label) ||
matcher.test(value.value) ||
matcher.test(value.sku) ||
matcher.test(value.application) ||
matcher.test(value.discontinuedproductlist) ||
matcher.test(value.type);
}));
},
如前所述,这些值中的每一个都包含多个单词字符串。
(value.application) 数据示例:"dry wet cold warm hot burned charred dirty clean soiled"
能够通过在搜索词的每一侧添加“\b”正则表达式 属性 来完成这项工作(请参阅 matcherWords)。
现在我可以 return 对某些类别进行字母组合匹配,而对其他类别只能进行全词匹配。希望这对其他人有帮助。
source: function(request, response) {
var matcherLetters = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); // match letters in string
var matcherWords = new RegExp("\b" + $.ui.autocomplete.escapeRegex(request.term) + "\b", "i"); // match words in string
response($.grep(SearchList, function(value) {
return matcherLetters.test(value.label) ||
matcherLetters.test(value.value) ||
matcherWords.test(value.sku) ||
matcherWords.test(value.application) ||
matcherWords.test(value.discontinuedproductlist) ||
matcherWords.test(value.type);
}));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
我有一个自动完成功能,它有多个类别,其值与用户输入的任何一组字母相匹配。每个类别值都存储有多个字符串(请参阅下面的 value.application 示例数据)。
这很好用,但我希望它只匹配整个单词而不是字母组合。如何实现?
示例:
源数据:"all caller tallest"
用户输入:“全部”
Returns: "all caller tallest"
只查找 return: "all"
source: function(request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); // match letters in string
response($.grep(SearchList, function(value) {
return matcher.test(value.label) ||
matcher.test(value.value) ||
matcher.test(value.sku) ||
matcher.test(value.application) ||
matcher.test(value.discontinuedproductlist) ||
matcher.test(value.type);
}));
},
如前所述,这些值中的每一个都包含多个单词字符串。
(value.application) 数据示例:"dry wet cold warm hot burned charred dirty clean soiled"
能够通过在搜索词的每一侧添加“\b”正则表达式 属性 来完成这项工作(请参阅 matcherWords)。
现在我可以 return 对某些类别进行字母组合匹配,而对其他类别只能进行全词匹配。希望这对其他人有帮助。
source: function(request, response) {
var matcherLetters = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); // match letters in string
var matcherWords = new RegExp("\b" + $.ui.autocomplete.escapeRegex(request.term) + "\b", "i"); // match words in string
response($.grep(SearchList, function(value) {
return matcherLetters.test(value.label) ||
matcherLetters.test(value.value) ||
matcherWords.test(value.sku) ||
matcherWords.test(value.application) ||
matcherWords.test(value.discontinuedproductlist) ||
matcherWords.test(value.type);
}));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>