2017-06-09 2 views
0

Ich habe die generische Fuzzy-Suche jetzt, so dass, wenn Typ "a" es mir jedes Wort zurückgibt, das ein A enthält. Allerdings möchte ich eine verfeinerte Suche, die dies tut .Regex für Suche, eine verfeinerte Fuzzy-Suche

Zum Beispiel habe ich das Wort: 'Frankies Muniz'

"Frank", "fr", "f", "mun", "m" gesucht wird in der Tat zurückkehren 'Frankies Muniz'

Suche "rank", "ster", "r", "niz" wird nichts zurückgeben

es muss die ersten Wörter beginnen, ich habe keine Ahnung, wo ich hier anfangen soll. Ich bin sehr neu in Regex. Danke

+1

Was ist Ihr Versuch ist? Sende deinen Regex-Ausdruck, um zu sehen, was falsch läuft. – thhan

+2

so etwas wie '/ \ bfrank/i'? aka: 'RegExp (" \\ b "+ term," i ")' besteht deine Tests – dandavis

+0

Wenn du ein komplettes Wort abgleichen willst, benutze 'RegExp (\' \ b $ {search} \\ w * \ ' , 'i') '- nicht vergessen, [escape] (https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript)' 'search''. –

Antwort

0

Sie könnten mit dieser beginnen:

Wenn input Benutzereingabe ist und name ist der Name auf Datenbank,

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"));

0

können Sie beginnen am Anfang Anpassung von Wörter mit dem Wort Grenze Zeichen \b. So ist die Macht der Regex wird:

new RegExp(`\\b${input}`, 'i'); 

Schauen Sie sich die interaktive Beispiel:

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>