Javascript 正则表达式没有按预期工作?

Javascript 正则表达式没有按预期工作?,javascript,regex,Javascript,Regex,我有一个正则表达式: new RegExp("^[a-z 0-9\"\-\`]+$", "ig") 我正在测试一个假定不起作用的字符串:“#vc” 但它确实通过了测试:(而且它不应该() 但是,如果我删除\”或\-或\`,它确实会工作(测试也会失败) 我做错了什么 我的正则表达式只需搜索英语、数字、空格、[“]、[-][和[`]如果使用RegExp构造函数,则需要将转义加倍,因为转义有两层:JavaScript字符串文字转义和正则表达式语法转义 但是,在您的情况下,可以编写一个正则表达式而不进

我有一个正则表达式:

new RegExp("^[a-z 0-9\"\-\`]+$", "ig")
我正在测试一个假定不起作用的字符串:
“#vc”

但它确实通过了测试:(而且它不应该(

但是,如果我删除
\”
\-
\`
,它确实会工作(测试也会失败)

我做错了什么


我的正则表达式只需搜索英语、数字、空格、[“]、[-][和[`]

如果使用
RegExp
构造函数,则需要将转义加倍,因为转义有两层:JavaScript字符串文字转义和正则表达式语法转义

但是,在您的情况下,可以编写一个正则表达式而不进行任何转义

在您的情况下,您可以只使用literal
RegExp
,在这种情况下,您只需要关心正则表达式语法中的转义,以及正则表达式中出现的任何
/
的转义(因为
/
被用作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
如您所见,包含从
的字符范围,
这意味着包含所有ASCII码从0x22到0x60的字符,而
#
恰好在该范围内


若要检查模式是否符合您的要求,您可以始终调用正则表达式的
source
属性以获取正则表达式的源字符串。

我不敢相信我失败了…:-0但请看这里,它已将所有内容(在visual studio中)@RoyiNamir:您不需要转义
在字符类内。如果您的文字字符串引号是
,则只需转义一次,如果您使用
引用文字字符串,则可以避免转义。我知道。只是问一下。我的
失败,所以我确实想知道我是否正确地转义了…:-)@RoyiNamir:正确,但冗余。删除冗余:
“^[a-z 0-9\\\-`]{0100}$”
。为什么不直接使用literal RegExp?这样比较容易混淆。
/^[a-z 0-9"-`]+$/gi