Hallo,
ich bin gerade mal wieder auf ein interessantes Problem gestoßen, bei dem ich ein wenig Hilfe von euch gebrauchen könnte. Ich möchte gerne eine Funktion schreiben, die einen Substring innerhalb eines Strings hervorhebt. Allerdings sollte dies auf eine "fuzzy"-Art geschehen, d.h. zwischen den einzelnen Buchstaben des Substrings dürfen auch noch andere Zeichen stehen. (Für diejenigen die Sublime Text kennen/benutzen, es sollte so aussehen wie deren Suchfunktion).
Ein Beispiel:
Wenn ich die Funktion highlight anrufe mit den Parametern "An example String" als String und "AexpS" als Suchstring sollte das Resultat so aussehen: An example String.
Ich bin selber bereits relativ weit gekommen dieses Problem zu lösen, allerdings denke ich, dass es sicher eine bessere Möglichkeit gibt. Mein Ansatz:
Dieser Code funktioniert so:
Das ganze funktioniert "einigermaßen" in dem Sinne, dass wenn der Suchstring mehrere Male vorkommt, wird das letzte auftreten hervorgehoben. Das ist leider nicht was ich will, ich möchte dass das erste vorkommen hervorgehoben wird. Auch glaube ich, dass das zusammensetzen der RegEx in meiner Version sehr umständlich ist und bin gespannt ob ihr vielleicht einen besseren Lösungsansatz habt!
Vielen dank im Vorraus!
mfg
Gsus
ich bin gerade mal wieder auf ein interessantes Problem gestoßen, bei dem ich ein wenig Hilfe von euch gebrauchen könnte. Ich möchte gerne eine Funktion schreiben, die einen Substring innerhalb eines Strings hervorhebt. Allerdings sollte dies auf eine "fuzzy"-Art geschehen, d.h. zwischen den einzelnen Buchstaben des Substrings dürfen auch noch andere Zeichen stehen. (Für diejenigen die Sublime Text kennen/benutzen, es sollte so aussehen wie deren Suchfunktion).
Ein Beispiel:
Wenn ich die Funktion highlight anrufe mit den Parametern "An example String" als String und "AexpS" als Suchstring sollte das Resultat so aussehen: An example String.
Ich bin selber bereits relativ weit gekommen dieses Problem zu lösen, allerdings denke ich, dass es sicher eine bessere Möglichkeit gibt. Mein Ansatz:
Code:
function highlight(s, t) {
var matcher = new RegExp(t.replace(/(.)/g, "(.*)($1)(.*)").replace(/\(\.\*\)\(\.\*\)/g, "(.*)"), "i");
var replace = "";
for(var i=1; i<=t.length*2+1; i++){
if(i%2 == 1) {
replace = replace + "$"+i;
} else {
replace = replace + "<strong>$"+i+"</strong>";
}
}
return s.replace(matcher, replace);
}
Dieser Code funktioniert so:
- Jeder Buchstabe des Suchstrings t wird in Klammern gesetzt und zwischen diesen Blöcken werden (.*) platziert
- Nun wird der neue String zusammengebaut aus den Blöcken der RegEx wobei jeder "gerade" Block hervorgehoben wird
Das ganze funktioniert "einigermaßen" in dem Sinne, dass wenn der Suchstring mehrere Male vorkommt, wird das letzte auftreten hervorgehoben. Das ist leider nicht was ich will, ich möchte dass das erste vorkommen hervorgehoben wird. Auch glaube ich, dass das zusammensetzen der RegEx in meiner Version sehr umständlich ist und bin gespannt ob ihr vielleicht einen besseren Lösungsansatz habt!
Vielen dank im Vorraus!
mfg
Gsus