2013-03-19 39 views
3

我有这样的正则表达式:正则表达式没有按预期工作?

new RegExp("^[a-z 0-9\"\-\`]+$", "ig") 

和我测试未想工作的字符串:'#vc'

但它通过测试:(和它不应该(#))

new RegExp("^[a-z 0-9\"\-\`]+$", "ig").test('#vc') //true 

但如果我删除或者\"\-\`,它的工作(和测试失败,因为它应该)。

我在做什么错?

我的正则表达式只搜索英文,数字,空间,[“],[ - ] [和[`]

回答

5

如果使用RegExp构造函数,你需要翻倍的逃逸,因为有逃逸的2层:摆脱在JavaScript字符串字面量和正则表达式语法逃逸

然而,在你的情况下,也可以写一个正则表达式,而不逃避所有

在你的情况,你可以。使用文字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") 

注意,我改变字符串引自"',以避免在字符串中逃脱"。如果由于某种原因喜欢",逃避"在文字串级:

new RegExp("^[a-z 0-9\"`-]+$", "ig") 

至于当前的正则表达式

new RegExp("^[a-z 0-9\"\-\`]+$", "ig") 

相当于

/^[a-z 0-9"-`]+$/gi 

作为你可以看到一个的字符范围包含到`包含,这意味着包含所有带有从0x22到0x60的ASCII码的字符,并且#恰好在该范围内。

要检查模式是否是你想要的,你总是可以调用source属性的正则表达式来获得正则表达式的源字符串。

+0

我不能相信我失败的那个...:-0 – 2013-03-19 10:20:59

+0

但看看这里http://i.stack.imgur.com/guafm.jpg它fu **一切(在视觉工作室) – 2013-03-19 10:25:45

+0

所以实际上\“将会是\\”...... grrrrrr – 2013-03-19 10:34:04

相关问题