否定JS RegExp字符类中的右方括号

时间:2017-03-09 11:54:46

标签: javascript regex

我试图使用String.prototype.match方法否定javascript正则表达式中的结束方括号,并返回null。

代码示例。

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

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

// returns null

1 个答案:

答案 0 :(得分:1)

始终在JS正则表达式字符类中跳过结束](请注意,]外部字符类不必转义为文本]):

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

否则,它会过早地关闭字符类,并可能导致您拥有的问题。您的\[[^]]+\]模式与[匹配,那么任何char(如[^]是JS中的有效构造,匹配任何字符,包括换行符和CR),然后是1个或多个字面{{1} }}符号(作为字符类之外的]不必转义,然后]。请参阅]中找到匹配项的your regex demo