2016-11-29 7 views
3

Zum Beispiel Ohne habe ich einige Ausdrucke wie dieeine Zeichenfolge in einem regulären Ausdruck

expression1 
expression2 expression3 

Ich möchte in einem regulären Ausdruck „expression2 expression3“ gefunden, wenn „expression1“ nicht eine unerwünschte Zeichenfolge (Let me nenn es unerwünscht.). So sollte es aussehen:

unwanted 
expression2 expression3 // Not Matched... 

string 
expression2 expression3 // Matched... 

Wie kann ich das tun? Ich habe so etwas versucht:

(?!unwanted\n)(expression2)[ ]+(expression3) 

Aber es funktioniert nicht. Was kann das Problem sein?

Vielen Dank im Voraus ...

+0

Ein Lookbehind wird funktionieren - ['(?

+0

Ich benutze JavaScript, das Lookbehind nicht unterstützt. – qwerty

+0

Gut, jetzt ist die Frage, extrahieren oder ersetzen Sie? –

Antwort

0

Capture the unerwünschte Zeichenfolge in Gruppe 1 und überprüfen, ob es undefined ist. Wenn ja, gibt es keine unerwünschten Text und Sie können dieses Spiel packen, sonst verwerfen:

var regex = /(unwanted\n)?(expression\d+)\s+(expression\d+)/g; 
 
var str = "unwanted\nexpression2 expression3\n\nstring\nexpression4 expression5"; 
 
var res = [], m; 
 
while ((m = regex.exec(str)) !== null) { 
 
    if (m[1] === undefined) res.push(m[0]); 
 
} 
 
console.log(res);

+0

Eigentlich ist meine Sorge, dass die unerwünschte Zeichenfolge 1 Zeile über dem Ausdruck 2 & 3 sein sollte, wenn es existiert. Das heißt, es wird keine andere Zeichenfolge zwischen ihnen geben. – qwerty

+0

Das ist kein Problem, benutze '/ (^ ungewolltes \ n)? (Ausdruck \ d +) \ s + (Ausdruck \ d +)/gm' - dies wird' unerwünschte' als ganze Zeile erfassen, falls vorhanden. –

+0

Können wir das Ergebnis als regulären Ausdruck anstelle eines Arrays erstellen, da ich es in einer Funktion verwenden werde? – qwerty

0

Vielleicht könnten Sie aus dieser Arbeit:

(?!unwanted.*)(?:^.{1,8}).*\s*(expression2 expression3) 

Grundsätzlich es stellt sicher, dass den Ausdrücken mindestens die Anzahl der Zeichen in unwanted vorausgeht, dass nichtunwanted ist.

Wenn Sie nur die Ausdrücke Sie sie in Capture-Gruppe 1.

See it here at regex101 zu bekommen.

Bearbeiten: Mit Blick auf dieses ist mir klar, es ist wahrscheinlich voller Vorbehalte, aber es könnte Ihnen den Anfang machen. (Kann sie jetzt nicht sehen, obwohl;)

Edit 2: Alternative (besser glaube ich) erfordern etwas, aber nicht erlaubt unerwünschte überall auf der Linie vor:

^(?!.*unwanted.*).+[\r\n](expression2 expression3) 

Here it is at regex101.

Verwandte Themen