正则表达式RegEx.test

时间:2011-09-12 10:24:03

标签: javascript regex

我希望将一个字符串与下面的正则表达式匹配 -

^\d{4}-\d{5}$|^\d{4}-\d{6}$

这是一个带有4位数字的邮政编码的正则表达式,然后是短划线后的5或6位数字。

我希望我的正则表达式是正确的,因为我已在一些在线RegEx测试器上测试过它。

并且在jquery中将我的字符串与上面的正则表达式匹配,我正在使用:

var regExpTest = new RegExp("^\d{4}-\d{5}$|^\d{4}-\d{6}$");  
alert(regExpTest.test("1234-123456"));

但我总是变得虚假,有人可以指导这里出了什么问题吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

因为正则表达式构造函数将字符串作为其参数,所以无论在何处使用它,都需要转义反斜杠\。在您的示例中,您需要\d的任何地方都需要\\d。如果您不通过在Firebug或Chrome的开发人员工具中测试代码,您可以看到会发生什么:

new RegExp("^\d{4}-\d{5}$|^\d{4}-\d{6}$");
//-> /^d{4}-d{5}$|^d{4}-d{6}$/

注意斜线消失了?现在看看当我们逃避每个反斜杠时会发生什么:

new RegExp("^\\d{4}-\\d{5}$|^\\d{4}-\\d{6}$");
//-> /^\d{4}-\d{5}$|^\d{4}-\d{6}$/

所以这应该解决你的问题。但是,当您不使用变量创建正则表达式时,使用正则表达式的文字语法要容易得多:

var regExpTest = /^\d{4}-\d{5}$|^\d{4}-\d{6}$/;
alert(regExpTest.test("1234-123456"));
//-> "true"

这样,您可以编写表达式而无需担心双重转义。