Welche Regex-Variante wird hier verwendet?+−
Die eingebaute Regex-Engine von JavaScript (die hinter RegExp und String.prototype.match/replace), da hier alles clientseitig in Ihrem Browser läuft statt auf einem Server. Sie ist PCRE sehr ähnlich, hat aber einige Unterschiede - zum Beispiel hängt die Lookbehind-Unterstützung von der Engine-Version ab, und benannte Gruppen verwenden die Syntax (?<name>...).
Warum findet mein Muster nur einen Treffer?+−
Standardmäßig stoppt ein Regex ohne das g-Flag (global) nach dem ersten Treffer - das entspricht dem tatsächlichen Verhalten von RegExp.exec() und String.match() in JavaScript. Aktivieren Sie oben das g-Flag, um jeden Treffer im Test-Text zu finden statt nur den ersten.
Was ist der Unterschied zwischen (...) und (?:...)?+−
Beide gruppieren Teile eines Musters, aber nur (...) - eine Erfassungsgruppe - speichert, was sie getroffen hat, sodass Sie später darauf verweisen können (als $1, $2, ... in einer Ersetzung oder in der Gruppenliste des Treffers). (?:...) ist eine nicht erfassende Gruppe: Sie gruppiert und wendet Quantoren an, ohne den Treffer zu behalten - nützlich, wenn Sie eine Gruppierung brauchen, sich aber nicht für den erfassten Text interessieren.
Wie funktionieren benannte Gruppen und $<name>-Ersetzungen?+−
Schreiben Sie (?<name>...) statt (...), um eine Gruppe unter einem Namen statt nur einer Nummer zu erfassen. Im Ersetzen-Modus verweisen Sie im Ersetzungstext darauf als $<name> - zum Beispiel ordnet (?<jahr>\d{4})-(?<monat>\d{2}), ersetzt durch $<monat>/$<jahr>, ein Datum neu an, ohne sich Gruppennummern merken zu müssen.
Was ist der Unterschied zwischen einem gierigen (greedy) und einem faulen (lazy) Quantor, wie + gegenüber +??+−
Ein gieriger Quantor (+, *, {2,4}) erfasst so viel wie möglich und gibt nur so weit nach, wie nötig ist, damit der Rest des Musters passt. Ein fauler Quantor - dasselbe Symbol gefolgt von ? - erfasst dagegen so wenig wie möglich und erweitert sich nur bei Bedarf Zeichen für Zeichen. Zum Beispiel erfasst <.+> in <a><b> gierig das gesamte <a><b>, während <.+?> nur <a> erfasst.
Was prüfen Lookahead und Lookbehind eigentlich, wenn sie keine Zeichen verbrauchen?+−
Sie prüfen, ob ein Muster unmittelbar vor oder nach der aktuellen Position erscheint, ohne es selbst in den Treffer aufzunehmen - (?=...) und (?<=...) prüfen also voraus/zurück, ob etwas vorhanden sein muss, während (?!...) und (?<!...) prüfen, dass es nicht vorhanden sein darf. Deshalb können Sie \d+(?=px) verwenden, um eine Zahl nur dann zu finden, wenn „px“ folgt, wobei „px“ selbst nie im Treffer auftaucht.