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字符串文字转义和正则表达式语法转义
但是,在您的情况下,可以编写一个正则表达式而不进行任何转义
在您的情况下,您可以只使用literalRegExp
,在这种情况下,您只需要关心正则表达式语法中的转义,以及正则表达式中出现的任何/
的转义(因为/
被用作literalRegExp
的分隔符):
/^[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