Jag söker efter en regexp som matchar ett sökord och när ett sökord är nästan rätt, t ex
Om jag söker efter nitro2k01 så ska den även matcha nxtro2k01 eller nitfo2k01 och gärna även om det saknas eller finns en bokstav för mycket, t ex nitroo2k01 eller ntro2k01.
Matchningen ska ske så att den matchar om ordet finns i söksträngen.
Regexp för att matcha nästan rätt
6 svar · 447 visningar · startad av nitro2k01
*bump*
Jag är övetygad om att det är en omöjlighet.
Reguljära uttryck kan inte "matcha till 95%" eller liknande.
Ett sätt skulle kunna vara att dynamiskt skapa uttryck, för att få med just de fall du talar om: total matchning, matchning där sökningen innehåller ett tecken mer eller matchning där sökningen innehåller ett tecken mindre.
Lite pseudo-kod:
var searchFor = "nitro2k01";
var searcForRE = new RegExp(searchForRE);
// Total matchning
if(searchForRE.test(str))
return true;
// Ett tecken har bytts ut mot ett annat
for(var i=0; i<searchFor.length; i++) {
searchForRE = new RegExp(ersätt det i:te tecknet i searchFor med en punkt);
if(searchForRE.test(str))
return true;
}
// Ett tecken saknas
for(var i=0; i<searchFor.length; i++) {
searchForRE = new RegExp(ta bort det i:te tecknet från searchFor);
if(searchForRE.test(str))
return true;
}
// Det finns ett tecken för mycket
for(var i=0; i<searchFor.length; i++) {
searchForRE = new RegExp(stoppa in en punkt på den i:te platsen i searchFor);
if(searchForRE.test(str))
return true;
}
Det finns inget stöd för "fuzzy matches" i JS.
Men om du vill skriva ngt eget så hittar du lite info här: Levenshtein Distance.
Finns även en del intressanta länkar där.
RGB skrev:
Det finns inget stöd för "fuzzy matches" i JS.
Men om du vill skriva ngt eget så hittar du lite info här: Levenshtein Distance.
Finns även en del intressanta länkar där.
Fantastiskt intressant - tack :)
Det fanns förresten redan en implemtation i JavaScript under länkarna.
http://www.mgilleland.com/ld/ldjavascript.htm
Ja, verkligen. Det ska jag läsa ikväll :)
Undrar om man får sno det skriptet rakt av, det var iaf precis vad jag var ute efter.