用于搜索的正则表达式,更精确的模糊搜索

时间:2017-06-09 14:20:43

标签: javascript regex search full-text-search

我现在有通用模糊搜索,所以如果键入“a”,它将返回包含A的每个单词。但是我想要一个更精确的搜索来执行此操作。

例如,我有一句话:'Frankster Muniz'

搜索“frank”,“fr”,“f”,“mun”,“m”确实会回归'Frankster Muniz'

搜索“rank”,“ster”,“r”,“niz”不会返回任何内容

它必须匹配第一个开头的单词,我不知道从哪里开始。我是正则表达式的新手。谢谢

2 个答案:

答案 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>