2016-04-25 28 views
0

Ich brauche eine Regex, die alle Vorkommen von zwei Anführungszeichen ('') ohne vorangestellte Klammer (() vorausgeht. Ich machte eine negative Vorausschau für die Klammer, gefolgt von einem Zitat. Aber warum ist das nicht funktioniert:Übereinstimmungen von zwei Anführungszeichen, denen keine öffnende Klammer vorangestellt ist

/(?!\()''/g 

zum Beispiel mit der Saite

(''test''test 

Es soll das zweite Vorkommen entspricht aber nicht die erste, aber sie paßt beides.


Wenn ich genau die gleiche Lösung, aber mit Überprüfung auf neue Linie statt Klammer, es funktioniert:

/(?!^)''/g 

Mit dieser Zeichenfolge:

''test''test 

Er passt als nur zu erwarten zweites Auftreten.

Geprüft here

+2

Und was ist das Endergebnis Sie brauchen? Passt einfach zusammen? Oder ersetzen? –

+2

'\ b''' ........... –

+0

@WiktorStribizew Ersetzen – Wilt

Antwort

1

Hier ist eine Lösung, die richtig, auch im Falle arbeiten Sie aufeinander folgende doppelte Apostrophe behandeln müssen:

var output = "''(''test'''''''test".replace(/(\()?''/g, function($0, $1){ 
 
\t return $1 ? $0 : 'x'; 
 
}); 
 
document.body.innerHTML = output;

Hier werden die /(\()?''/g regex Suche für alle passt mit der ( und ohne, aber innerhalb der ersetzen Callback m Wir suchen nach dem Spiel der Gruppe 1. Wenn Gruppe 1 übereinstimmt und nicht leer ist, verwenden wir die gesamte Übereinstimmung als Ersetzungstext ($0 steht für den gesamten Übereinstimmungswert). Wenn dies nicht der Fall ist (( vor ''), fügen Sie einfach die Ersetzung ein.

1

Es ist schlecht, dass Javascript Lookback nicht unterstützt, aber es gibt eine Problemumgehung.

Versuch:

[^\(]('{2,2}) 

Siehe https://regex101.com/r/gT5jR6/1

+0

Danke für Ihre Antwort, aber Ihre Regex stimmt nicht nur mit den Anführungszeichen überein, sondern auch mit dem führenden Zeichen. In deinem Beispiel entspricht es "e'''. – Wilt

+0

nop. Lies nur $ 1 oder Gruppe 1. Nicht ganz Capture. Schau mal, was MATCH1 in dem Demo-Link entspricht. – Saleem

+0

danke, ich sollte Lesen Sie mehr sorgfältig. – Wilt