如果使用RegExp
构造函数,则需要加倍转义,因为转义有 2 层:JavaScript 字符串文字中的转义和正则表达式语法中的转义。
但是,在您的情况下,可以编写一个正则表达式而不转义。
在您的情况下,您可以只使用literalRegExp
,其中您只需要关心正则表达式语法中的转义,以及/
正则表达式中出现的任何内容的转义(因为/
用作 literal 的分隔符RegExp
:
/^[a-z 0-9"\-`]+$/gi
另一种方法是:
/^[a-z 0-9"`-]+$/gi
-
如果它是字符类中的最后一个,则不需要转义破折号。这样,您就不必将自己与所有转义混淆。
或者,如果您仍想使用RegExp
构造函数,则需要将转义加倍以\
在字符串中指定:
new RegExp('^[a-z 0-9"\\-`]+$', "ig")
或者只使用-
字符类中最后指定的其他版本:
new RegExp('^[a-z 0-9"`-]+$', "ig")
请注意,我将字符串引号从更改"
为'
以避免必须"
在字符串中转义。如果您出于某种原因更喜欢,请在文字字符串级别"
转义:"
new RegExp("^[a-z 0-9\"`-]+$", "ig")
至于您当前的正则表达式
new RegExp("^[a-z 0-9\"\-\`]+$", "ig")
相当于
/^[a-z 0-9"-`]+$/gi
如您所见,包含从"
to`
的字符范围,这意味着包含 ASCII 码从 0x22 到 0x60 的所有字符,并且#
恰好在该范围内。
要检查模式是否是您想要的,您可以随时调用source
正则表达式的属性来获取正则表达式的源字符串。