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 MDN,String.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('[()[\]]')
如何在 javascript 正则表达式中使用右方括号作为字符?
"Acb[".match('[\(, \), \[]')
returns:
["["]
但是当我添加右方括号作为字符时它不起作用:
"Acb[".match('[\(, \), \[, \]]')
null
"Acb]".match('[\(, \), \[, \]]')
null
"Acb]".match(/[\(, \), \[, \]]/)
returns["]"]
。您应该使用 /
而不是引号来表示正则表达式,以避免转义
您也不需要转义其中的大部分字符。 "Acb]".match(/[()[, \]]/)
将匹配 (, )、[ ]、逗号或 space
字符 类 的信息可以是 found here
According to MDN,String.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('[()[\]]')