我想用下面的正则表达式匹配一个字符串-
^\d{4}-\d{5}$|^\d{4}-\d{6}$
这是 4 位邮政编码的正则表达式 - 然后是破折号后的 5 或 6 位数字。
我希望我的正则表达式是正确的,因为我已经在一些在线正则表达式测试仪上对其进行了测试。
为了在 jquery 中将我的字符串与上面的正则表达式匹配,我使用:
var regExpTest = new RegExp("^\d{4}-\d{5}$|^\d{4}-\d{6}$");
alert(regExpTest.test("1234-123456"));
但我总是弄错,谁能指导一下这里出了什么问题?
谢谢!
最佳答案
因为正则表达式构造函数将字符串作为参数,所以无论在何处使用反斜杠 \
都需要对其进行转义。在您的示例中,任何有 \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"
这样,您可以编写表达式而不必担心双重转义。
关于javascript - 正则表达式 RegExp.test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386435/