javascript - 正则表达式 RegExp.test

标签 javascript regex

我想用下面的正则表达式匹配一个字符串-

^\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/

相关文章:

Javascript 正则表达式 - 从 url 中删除变量(如果存在)

javascript - 如何在 Angular 6 中实现选择下拉列表(按搜索过滤),如何按名称属性过滤对象

javascript - 如果选中复选框,如何启用DateTime?

r - 根据正则表达式拆分data.table列

java - 针对特定文件的 JUnit 测试限制给出错误输出

java - 正则表达式内部数字检查

javascript - Highcharts.js 变量饼图无法沿百分比数据标签正确呈现数据

javascript - 如何在 jQuery.post 中使用动态数据名称?

javascript - 在 ES6 类中添加上下文/私有(private)变量(不引用 this。)

c# - ^([1-9]{1,2},){4}[1-9]{1,2}$ 和 ([1-9]{1,2},){4}[ 有什么区别1-9]{1,2}?