Regulären Ausdruck für Wortteile (JavaScript)
Ich würde gerne das Handwerk eine groß-und Kleinschreibung regex (für JavaScript), das entspricht Straßennamen, auch wenn jedes Wort abgekürzt wurde. Zum Beispiel:
n univ av sollte mit N University - Ave
König blv sollte mit der Martin-Luther - King Jr Blvd
ne 9. sollte passen beide NE 9. St 9. St NE
Bonus-Punkte (JK) für ein "ersetzen" regex umschließt den übereinstimmenden text mit <b>
tags.
- Wie ist dies mit den Tags "Spaß", Zitat von Jamie Zawinski : Einige Leute, wenn Sie mit einem problem konfrontiert, denken, "ich weiß, ich werde Sie reguläre Ausdrücke verwenden." Nun haben Sie zwei Probleme.
- tolles Zitat.
- Jetzt müssen Sie die nur-Programmierer auf der Erde, die bisher noch nicht konfrontiert worden mit einer bestimmten quote. 😉 Ich für meinen Teil bin es satt. oO
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast:
Du willst:
Damit Sie tun:
Voilà!
Aber ich bin nicht fertig, ich will meine bonus-Punkte. Also ändern wir das Muster um:
Dann:
Nun haben wir:
So, können wir schreiben:
.*
sollten nicht-gierig -.*?
. Auch deine regex erfüllt nicht die passende Anforderung von ne 9..matches
array:["N University Ave", " ", "ersity ", "e"]
. Ist das richtig?var regex = new RegExp("n univ av".replace(/(\S+)/g, function(s) { return "\\b(" + s + ")(.*)" }).replace(/\s+/g, ''), "gi");
(.*?)
zu Beginn des 2. regex, zum aufzeichnen beliebiger text der vor der ersten Partie. Ich änderte dann dievar result = ''
zuvar result = matches[1]
und angepasst, der loop entsprechend.Seite Hinweis - diese Umsetzung nicht achten Sie auf übereinstimmung Reihenfolge, also:
Wenn das ein problem ist, eine aufwändigere sequentiellen Ansatz wäre notwendig geworden, etwas, das ich vermieden haben hier durch die Verwendung einer
replace()
callback-Funktion.subject
inkrementiert einen Zähler, wie Sie gehen würde den trick tun. Wenn der Zähler entspricht der Anzahl der Teile, alle von Ihnen sind in der Eingabe.Einfach:
Oder etwas entlang dieser Linien.
Wenn diese Ihre Suchbegriffe:
Es klingt wie dein Algorithmus sollte so etwas wie dieses
input.split(/\s+/)
/term/i
<b>
- tags.input.replace(/(term)/gi, "<b>\$1</b>")
Hinweis: werden Sie wahrscheinlich wollen, nehmen Sie vorsichtshalber die Flucht regex-Metazeichen.
string.replace()
beginnt immer am Anfang einer Zeichenkette, wodurch möglicherweise ungültige Verschachtelung der Tags etc, wenn der zweite Suchbegriff ist Teil des ersten. Oder der zweite Suchbegriff ist"b"
. 😉