2017-02-16 2 views
0

Ich habe fast keine Erfahrung mit Regex. Was ich versuche zu tun, Text zwischen Klammern entsprechen, wie folgt aus:Erkennen von Text zwischen geschweiften Klammern ohne Strings. Teilcode gemacht

{([^}]*)} 

Demo: https://regex101.com/r/tG7kC0/16

sie aber nicht übereinstimmen, wenn sie zwischen Anführungszeichen (Einzel und Doppel) sind und mit entweichenden Zeichen , wie folgt aus:

(["'])(?:(?!\1)[^\\]|\\.)*\1? 

Demo: https://regex101.com/r/tG7kC0/15

ich es geschafft, beide reguläre Ausdrücke zu erstellen, und ich bin nicht sicher, ob sie gut sind oder nicht. Die Sache ist, dass ich sie getrennt arbeiten lassen habe. Jetzt will ich sie vereinen, aber ich habe keine Ahnung. Wie kann ich das erreichen?

+0

Erstens, warum Ninja downvote? Zweitens, @ WiktorStribiżew, Vielen Dank für Ihre Antwort. Habe es funktioniert. Erfahren Sie mehr darüber und machen Sie es in JavaScript möglich. –

Antwort

1

In Javascript gibt es keinen wirklichen Weg, nur mit dem Muster zu tun.

Eine einfache Abhilfe besteht darin, die beiden Muster in einem Wechsel zu verbinden und die Capture-Gruppen zu testen:

var re = /(["'])(?:(?!\1)[^\\]|\\[\s\S])*\1?|{([^}]*)}/g; 
var str = 'asd + {ASD} + {A-._&SD} + "asd\\"{A-.\'_&SD}" + \'a\\\'s\\\\d\' + "" + \'\''; 
var m; 
while ((m = re.exec(str)) !== null) { 
    if (!m[1]) 
     console.log(m[2]); 
} 

In Ersatz Zusammenhang eine Funktion als Ersatzparameter verwendet den gleichen Test durchzuführen:

var result = str.replace(re, function (m, g1, g2) { 
    if (g1) return m; 
    // do what you want with g2 
    return '#' + g2 + '#'; 
}); 
+0

Immer noch besser als ein direkter Programmieransatz. –

1

Verwenden Sie das folgende RegexMuster:

\{([^}\"']+)\}(?!['"]) 

https://regex101.com/r/tG7kC0/21

(?!['"]) - Look-Ahead-negativen Behauptung, Streichhölzer Worte mit geschweiften Klammern, wenn sie nicht in Anführungszeichen

+0

@CasimiretHippolyte, vereinbart, behoben – RomanPerekhrest

+0

Das ist viel besser als das, was ich versuchte. Ich begann mit einem kleinen Ding und endete mit einem großen Monster xD Ich werde es analysieren. Ihr seid beide freundliche Jungs, die hier helfen, könnt ihr mir erklären, warum ich Downvotes bekomme? Ich weiß, dass dies eine neue Frage sein kann, aber ich bin kein Regex-Typ und kann nicht mehr Zeit damit verschwenden. Fragte hier oder machte eine Programmierlösung statt einer Regex-Lösung. –

+0

@ JorgeFuentesGonzález, es gibt eine Menge von Hassern auf SO, sie mögen – RomanPerekhrest

Verwandte Themen