这有什么不对吗?
var attrRegex = /^.*[[].*[]]$/;
var attrKeys = key.match(attrRegex);
这应匹配some-var[data-key]
答案 0 :(得分:4)
要指定[
和]
,您应该将其\[
和\]
转义。
/^.*\[.*\]$/
但是,您当前的正则表达式只会检查[
后跟]
,而]
位于字符串末尾。它不会验证正好有1个左括号[
和1个近括号]
,或者括号[]
是否平衡。
如果您想确保只有一对括号,并且不允许.
禁止的换行符:
/^[^\[\]\n\r\u2028\u2029]*\[[^\[\]\n\r\u2028\u2029]*\]$/
分解:
^
[^\[\]\n\r\u2028\u2029]* # Exclude [, ], and newline characters
# \n\r\u2028\u2029 are originally excluded by .
\[ # Literal [
[^\[\]\n\r\u2028\u2029]*
\] # Literal ]
$
/^.*[[].*[]]$/
是如何解释的?在Firefox上,根据我的测试,正则表达式被解释为:
^ # Nothing interesting
.* # ...
[[] # Character class containing [
.* # ...
[] # Empty character class!!! NOTHING can be matched
] # Literal ]
$ # ...
不确定其他浏览器,但在编写正则表达式时,请正确转义以避免意外行为。
根据语言的不同,]
或两者[]
在字符类[]
中具有特殊含义,必须进行转义。