Ersetzt alle Zeichenübereinstimmungen, die nicht mit einem Backslash versehen sind

8

Ich verwende Regex, um ( in anderen Regexes (oder Regexs?) durch (?: zu ersetzen, um sie in nicht passende Gruppen umzuwandeln. Mein Ausdruck geht davon aus, dass keine (?X -Strukturen verwendet werden und wie folgt aussehen:

%Vor%

Leider funktioniert das nicht, wenn zwei Übereinstimmungen nebeneinander liegen, wie in diesem Fall: how((\s+can|\s+do)(\s+i)?)?

Mit Lookbehinds ist die Lösung einfach:

%Vor%

Aber JavaScript unterstützt keine Lookbehinds, also was kann ich tun? Meine Recherchen brachten keine einfache universelle Lookbehind-Alternative.

    
Tomáš Zato 31.07.2015, 20:53
quelle

3 Antworten

2

Benutze Lookbehind durch Umkehrung:

%Vor% %Vor%

Beachten Sie, dass das Regex-Muster auch umgekehrt ist, sodass wir Look-Ahead statt Look-Back verwenden können und der Substitutions-String auch umgekehrt ist. Es wird mit längeren Regexps zu schwierig, aber in diesem Fall ist es immer noch nicht so unlesbar.

    
Wiktor Stribiżew 31.07.2015, 21:14
quelle
2

Eine Option besteht darin, einen zweistufigen Ersatz mit einem Token durchzuführen (ich mag Unicode dafür, da es unwahrscheinlich ist, dass es an anderer Stelle erscheint):

%Vor%

Ссылка

    
nrabinowitz 31.07.2015 21:19
quelle
0

(EDITED)

string Beispiel:

%Vor%

Einzeilige Lösung:

%Vor%

Ergebnis:

%Vor%

und natürlich funktioniert es mit Strings wie (\ s + \(can\) | \ s + do) (\ s + i)?)?

    
AwokeKnowing 31.07.2015 21:12
quelle

Tags und Links