2009-04-28 4 views
3

Die aktuelle Implementierung von Remy Sharp's jQuery tag suggestion plugin prüft nur auf Übereinstimmungen am Anfang eines Tags. Wenn Sie beispielsweise "Photoshop" eingeben, wird kein Tag namens "Adobe Photoshop" zurückgegeben.Wie führe ich eine Javascript-Übereinstimmung mit einem Muster durch, das von einer Variablen abhängt?

Bei der Suche wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden. Ich habe es leicht modifizierte überschüssige Räume zu trimmen und Fall ignorieren:

for (i = 0; i < tagsToSearch.length; i++) { 
    if (tagsToSearch[i].toLowerCase().indexOf(jQuery.trim(currentTag.tag.toLowerCase())) === 0) { 
     matches.push(tagsToSearch[i]); 
    } 
} 

Was habe ich versucht, ist dies wieder tun ändern zu können „Adobe Photoshop“, wenn der Benutzer in „Photoshop“ zurückzukehren. Ich habe versucht, match, aber ich kann nicht scheinen, um zu arbeiten, wenn eine Variable im Muster vorhanden ist:

for (i = 0; i < tagsToSearch.length; i++) { 
    var ctag = jQuery.trim(currentTag.tag); 
    if (tagsToSearch[i].match("/" + ctag + "/i")) { // this never matches, presumably because of the variable 'ctag' 
     matches.push(tagsToSearch[i]); 
    } 
} 

Was ist die korrekte Syntax, um eine regex Suche auf diese Weise durchzuführen?

Antwort

5

Wenn Sie Regex dynamisch in JavaScript ausführen möchten, müssen Sie RegExp object verwenden. Ich glaube, Ihr Code würde wie folgt aussehen (nicht getestet, nicht sicher, aber richtig allgemeine Idee):

for (i = 0; i < tagsToSearch.length; i++) { 
    var ctag = jQuery.trim(currentTag.tag); 
    var regex = new RegExp(ctag, "i") 
    if (tagsToSearch[i].match(regex)) { 
     matches.push(tagsToSearch[i]); 
    } 
} 
2

Statt

"/" + ctag + "/i" 

Verwenden

new RegExp(ctag, "i") 
0

Sie könnten auch benutze weiterhin indexOf, ändere einfach deine === 0 zu> = 0:

Aber andererseits kann ich mich irren.

Verwandte Themen