Ich möchte alle Zeichenfolgen, die von -
eingeschlossen sind, in Zeichenfolgen ersetzen, die von ~
eingeschlossen sind, aber nicht, wenn diese Zeichenfolge wieder von *
eingeschlossen wird.
Als Beispiel, diese Zeichenfolge ...
%Vor%... sollte ...
werden %Vor% Wir sehen -
wird nur ersetzt, wenn nicht in *<here>*
ist.
Mein javascript-regex für jetzt (was nicht kümmert, ob es von *
oder nicht eingeschlossen ist):
Bearbeiten: Beachten Sie, dass es möglicherweise eine ungerade Anzahl von *
s gibt.
Das ist eine schwierige Sache mit regulären Ausdrücken. Ich denke, was ich tun würde, ist etwa so:
%Vor% Das sucht nach entweder -
oder *
-Gruppen und führt nur die Ersetzung anhand von gestrichelten Einträgen durch. Im Allgemeinen sind "Nesting" -Syntaxen mit regulären Ausdrücken eine Herausforderung (oder unmöglich). (Und natürlich, als Kommentar zu den Fragezeichen, gibt es spezielle Fälle - dangling metacaracters -, die das auch komplizieren.)
Es ist eine sehr komplizierte Aufgabe herauszufinden, ob eine Übereinstimmung nicht ist, die von einigen Begrenzern eingeschlossen wird - siehe auch Beispiel . Lookaround könnte helfen, aber JS unterstützt nur Lookahead. Also könnten wir " nicht umgeben von ~
" auf " gefolgt von einer geraden Zahl oder ~
" umschreiben und darauf passen:
Aber besser passen wir sowohl auf -
als auch auf *
, so dass wir alles, was in *
s eingeschlossen ist, konsumieren und dann in einer Callback-Funktion entscheiden können, sie nicht zu ersetzen:
Dies hat den Vorteil, dass " eingeschlossen ", z. durch Hinzufügen von Wortgrenzen auf dem "Inneren", zum besseren Umgang mit ungültigen Mustern (ungerade Anzahl von * Zeichen, wie von @Maras zum Beispiel erwähnt) - der aktuelle Regex nimmt nur die nächsten zwei Erscheinungen.
Eine tiefere Version von Jacks sehr klarer Antwort.
%Vor%Scheint zu funktionieren, Prost.
Tags und Links javascript jquery regex