我希望将一个字符串与下面的正则表达式匹配 -
^\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"));
但我总是变得虚假,有人可以指导这里出了什么问题吗?
谢谢!
答案 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"
这样,您可以编写表达式而无需担心双重转义。