0

这有什么问题?

var attrRegex = /^.*[[].*[]]$/;
var attrKeys = key.match(attrRegex);

这应该匹配some-var[data-key]

4

1 回答 1

4

要指定[and ],您应该转义它们\[and \]

/^.*\[.*\]$/

但是,您当前的正则表达式只会检查是否有 a[后跟 a ],并且a]位于字符串的末尾。它不能验证正好有 1 个左括号[和 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 ]
$    # ...

不确定其他浏览器,但是当您编写正则表达式时,请正确转义以避免意外行为。

取决于语言,]或者两者[]在字符类中具有特殊含义[]并且必须被转义。

于 2013-05-07T05:02:19.547 回答