2017-06-26 6 views
1

Ich versuche, alles in Klammern mit einem Regex zu ersetzen, aber ich scheint eine unerwartete Übereinstimmung zu bekommen.Regex nicht erwartet Spiel

Hier ist der Text, den ich passend bin versucht:

Foo (bar) 

Hier ist die regex:

/(?=\().*(?=\))/ 

Ich erwarte es alles zwischen den Klammern zurück: dh die .* oder bar. Es gibt jedoch die erste Klammer mit dem Text zurück: (bar.

Das sollte nicht passieren, oder? Da die erste Klammer in einem positiven Look-Ahead ist (?=...) ...

Bitte sagen Sie mir, wo ich falsch ...

gehe
+2

Ich glaube, Sie müssen Ihre Änderungen erste Instanz von '(? = \()' nach '(? <= \() 'um es hinter und statt Lookahead aussehen zu lassen. – brittenb

Antwort

2

Dank brittenb Ich musste meinen Look-Ahead in ein Lookbehind ändern.

Also meine Regex wurde

/(?<=\().*(?=\))/ 
+0

Javascript erlaubt keine Lookbehinds. Wenn ich diese Lösung in der Konsole versuche, bekomme ich 'Ungültiger regulärer Ausdruck'. –

+0

Scheint gut für mich zu funktionieren ... –

0

/\([^\)]+\)/

Aus der Zeichenfolge Foo (bar) diese regex kehrt den Text (bar)

Aufteilung:

/     #delimiter 
    \(   #begins with a open-parenthesis 
     [^\)]+ #all content that is not a close-parenthesis 
      \) #ends with a close-parenthesis 
       /#end delimiter