javascript 带有右方括号字符的匹配方法

javascript match method with a closing square bracket character

如何在 javascript 正则表达式中使用右方括号作为字符?

"Acb[".match('[\(, \), \[]')

returns:

["["]

但是当我添加右方括号作为字符时它不起作用:

"Acb[".match('[\(, \), \[, \]]')
null


"Acb]".match('[\(, \), \[, \]]')
null

"Acb]".match(/[\(, \), \[, \]]/)returns["]"]。您应该使用 / 而不是引号来表示正则表达式,以避免转义

时出现问题

您也不需要转义其中的大部分字符。 "Acb]".match(/[()[, \]]/) 将匹配 (, )、[ ]、逗号或 space

字符 类 的信息可以是 found here

是正确的。我发帖只是为了解释为什么 his/her 答案有效。

According to MDNString.prototype.match 的参数可以是字符串而不是正则表达式:

Parameters

regexp

A regular expression object. If a non-RegExp object obj is passed, it is implicitly converted to a RegExp by using new RegExp(obj).

因此,为什么使用斜杠来分隔正则表达式有效,而使用引号则不行,这并不是很明显。原因是两种定界形式对反斜杠转义的处理方式不同。当你写

"Acb[".match('[\(, \), \[, \]]')

在创建任何正则表达式之前,引号首先应用反斜杠转义。由于反斜杠括号和反斜杠括号不是特殊的转义序列,因此它们分别转换为括号和方括号。因此:

'[\(, \), \[, \]]'

相当于:

'[(, ), [, ]]'

只有在那之后才会调用 RegExp 构造函数。此时右括号不再被转义,而是被视为字符 class 的结束标记,而不是 class 中的字符。您可以通过转义反斜杠本身来避免这种情况:

"Acb[".match('[\(, \), \[, \]]')

--

您似乎还在使用逗号分隔字符中的字符 class - 这是不必要的,不需要分隔符。因此,一个更简单的表达式是:

"Acb[".match(/[()[\]]/)

"Acb[".match('[()[\]]')