这有什么问题?
var attrRegex = /^.*[[].*[]]$/;
var attrKeys = key.match(attrRegex);
这应该匹配some-var[data-key]
这有什么问题?
var attrRegex = /^.*[[].*[]]$/;
var attrKeys = key.match(attrRegex);
这应该匹配some-var[data-key]
要指定[
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 ]
$ # ...
不确定其他浏览器,但是当您编写正则表达式时,请正确转义以避免意外行为。
取决于语言,]
或者两者[]
在字符类中具有特殊含义[]
并且必须被转义。