如果你使用RegExp
构造函数,你需要加倍逃脱,因为有 2 层转义:JavaScript 字符串文字中的转义和正则表达式语法中的转义。
但是,就您而言,可以编写正则表达式而不转义。
在你的情况下,你可以使用literal RegExp
,其中您只需要关心正则表达式语法中的转义,以及转义任何/
出现在正则表达式中(因为/
用作文字的分隔符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")
请注意,我将字符串引号更改为"
to '
以避免不得不逃跑"
在字符串中。如果您出于某种原因更喜欢"
, 逃脱"
在文字字符串级别:
new RegExp("^[a-z 0-9\"`-]+$", "ig")
至于你当前的正则表达式
new RegExp("^[a-z 0-9\"\-\`]+$", "ig")
相当于
/^[a-z 0-9"-`]+$/gi
正如你所看到的字符范围"
to `
已经包括了,这意味着包含 ASCII 码从 0x22 到 0x60 的所有字符,并且#
恰好在范围内。
要检查模式是否是您想要的,您可以随时调用source
正则表达式的属性来获取正则表达式的源字符串。