我现在有通用模糊搜索,所以如果键入“a”,它将返回包含A的每个单词。但是我想要一个更精确的搜索来执行此操作。
例如,我有一句话:'Frankster Muniz'
搜索“frank”,“fr”,“f”,“mun”,“m”确实会回归'Frankster Muniz'
搜索“rank”,“ster”,“r”,“niz”不会返回任何内容
它必须匹配第一个开头的单词,我不知道从哪里开始。我是正则表达式的新手。谢谢
答案 0 :(得分:0)
你可以从这开始:
如果input
是用户输入的,name
是数据库上的名称,
var name = "Frankster Muniz";
var input = "Frank";
function match(name,input){
var matched = 0;
if(name.match(new RegExp("\\b"+input+".*","i")))
matched=1;
return matched;
}
console.log(match(name,"Frank"));
console.log(match(name,"ster"));

答案 1 :(得分:0)
您可以使用单词边界字符\b
开始在单词的开头进行匹配。所以正则表达式的力量变成了:
new RegExp(`\\b${input}`, 'i');
查看交互式示例:
let names = [
'Frankster Muniz',
'Sarah Walin',
'Tyler Robinson',
'Ronald Muniz'
];
let results = document.querySelector('#results');
let input = document.querySelector('input');
input.addEventListener('input', function() {
findUsers(this.value);
});
buildList(names);
function findUsers(input) {
let reg = new RegExp(`\\b${input}`, 'i');
let found = names.filter(name => reg.test(name));
buildList(found);
}
function buildList(names) {
let html = '';
names.forEach(name => html += `<li>${name}</li>`);
results.innerHTML = html;
}
<label>Filter:</label>
<input id="search">
<br><br>
<div>Names:</div>
<ul id="results"></ul>