2017-03-09 1 views
0

Ich versuche, ein schließendes quadratisches Brackek in regulärem Javascript-Ausdruck mit der String.prototype.match-Methode zu negieren, und es gibt null zurück.Negierende schließende eckige Klammer in einer JS RegExp-Zeichenklasse

Codebeispiel.

// trying to match [value] 
// expected regex to match a [ followed by one or more character except ] then a ]. 

"text[value]".match(/\[[^]]+\]/); 

// returns null 
+0

Escape the ']' in der Zeichenklasse. ' "text [Wert]". match (/ \ [[^ \]] + \] /) ; ' –

+0

Ich habe es vorher versucht und es hat funktioniert, außer dass es auch das \ negiert. –

+0

Sie sagen das nicht. Wie? Bitte senden Sie das Schnipsel, das zeigt, was mit dem'/\ [[^ \]] + falsch ist \]/'regex. Es wird [' [str \ str] 'in' str [str \ str] '] (https://regex101.com/r/TofVz3/1). –

Antwort

1

immer das Schließen ] in einer JS regulären Ausdruck Zeichenklasse ecape (beachten Sie, dass eine ] außerhalb Zeichenklasse nicht analysiert werden als eine wörtliches ] entgangen sein muss):

console.log("text1[value1]".match(/\[[^\]]+\]/)); 
 
console.log("text1[value2]".match(/\[[^\]]+]/)); 
 
console.log("text1[value2\\value3]".match(/\[[^\]]+]/));

Andernfalls schließt es die Zeichenklasse vorzeitig und kann Probleme wie die, die Sie haben, verursachen. Ihr \[[^]]+\] Muster entspricht [, dann ein beliebiges Zeichen (wie [^] ist ein gültiges Konstrukt in JS, das mit einem beliebigen Zeichen einschließlich Zeilenvorschub und CR übereinstimmt) und dann 1 oder mehrere Literal ] Symbole (wie ] außerhalb einer Zeichenklasse muss nicht maskiert werden) und dann ]. Siehe your regex demo, die eine Übereinstimmung in "str[\n]]]]]]]]]" findet.

Verwandte Themen