2016-05-09 7 views
0

Ich versuche, mit regex (regular expression) zu tun, zum Beispiel (wenn mit Hilfe von Javascript):Wie ignoriere ich maskierte Elemente in einer "Regel" (regulärer Ausdruck)?

var str = '[abc\[0123\]] [efg\[987\]h] [Hello \[world\]!] [foo [baz]]'; 
str.match(/\[(.*?)\]/g); 

Ausgang: ["[abc[0123]", "[efg[987]h", "[Hello [world]!", "[foo [baz]"]

Oder

var str = '{abc\{0123\}} {efg\{987\}h} {Hello \{world\}!} {foo {baz}}'; 
str.match(/\{(.*?)\}/g); 

Ausgabe: ["{abc{0123}", "{efg{987}", "{Hello {world}", "{foo {baz}"]

Aber ich brauche, um die ersten Elemente ignorieren nicht als [foo [baz]] und gefangen nur [baz] und andere entgangen, die auch entgangen sind:

["[abc[0123]]", "[efg[987]h]", "[Hello [world]!]", "[baz]"] 

Und zweite Beispiel gibt:

{"{abc{0123}}", "{efg{987}h}", "{Hello {world}!}", "{baz}"] 

Meine Absicht ist zunächst zu studieren, sondern auch planen, in solchen Dingen als eine Struktur zu verwenden, die CSS-Selektoren ähnelt:

  • Zum Beispiel:

    input[name=\[0\]], input[name=foo\[baz\]\[bar\]] 
    

    Returns:

    [0], [1] 
    
  • und Karte von URLs planen, ich zu erstellen:

    /{name}/{foo\{bar}/{baz\{foo\}}/ 
    

    Returns:

    {name}, {foo{bar}, {baz{foo}} 
    

Was ich möchte ist die Zeichen in die Regel entfliehen, wie kann ich das tun? Kann ein Beispiel in jeder Sprache sein, das wichtigste ist die Regex

+1

Ich denke, man 'var str gemeint =‚[abc \\ [\\]] [efg \\ [987 \\] h] [Hallo \\ [Welt \\]! ] [foo [baz]] '; '. Dann, wenn Sie masked ']' und '[' suchen möchten, verwenden Sie ['\ [[^ \ [\] \\] * (?: \\. [^ \ [\] \\] *) * \ ] '] (https://regex101.com/r/zO1vP4/1). Beachten Sie, dass es nicht mit '[foo [baz]]' übereinstimmt, da die inneren Klammern nicht maskiert sind. –

Antwort

0

Da Sie nicht balanced Text tun (und können), das Beste, was Sie tun können, ist Konto
für Escape-Escape oder Escape-Klammern .
Beachten Sie, dass ich die abgerollte Version dieser Regexe nicht aufgenommen habe, da diese
eine Körper erfordern.

(Stellvertreter {} nach Bedarf).

das erste Verschluss

\[(?:\\[\\\[\]]|[^\]])+\]

Expanded

\[ 
(?: 
     \\ [\\\[\]] 
    | 
     [^\]] 
)+ 
\] 

Die absoluten inneren Verstrebungen

\[(?:\\[\\\[\]]|[^\[\]])+\]

\[ 
(?: 
     \\ [\\\[\]] 
    | 
     [^\[\]] 
)+ 
\] 
Expanded