小编典典

Javascript RegEx不起作用

javascript

我有以下javascript代码:

    function checkLegalYear() {
        var val = "02/2010";

        if (val != '') {
           var regEx = new RegExp("^(0[1-9]|1[0-2])/\d{4}$", "g");

            if (regEx.test(val)) {
               //do something
            }
            else {
               //do something
            }
        }
    }

但是,对于我通过的任何值(02/2010),我的regEx测试始终返回false。我的代码有问题吗?我已经在各种javascript编辑器上在线尝试了此代码,并且效果很好。


阅读 284

收藏
2020-04-25

共1个答案

小编典典

因为要从字符串创建正则表达式,所以必须加倍反斜杠:

var regEx = new RegExp("^(0[1-9]|1[0-2])/\\d{4}$", "g");

以字符串开头时,必须考虑以下事实:正则表达式将首先被解析为这样的形式,即作为JavaScript字符串常量。字符串常量的语法对正则表达式一无所知,反斜杠字符也有自己的用法。因此,当解析器使用正则表达式字符串完成处理时,它看起来将与查看源代码时有很大不同。您的源字符串如下所示

"^(0[1-9]|1[0-2])/\d{4}$"

但是在字符串解析之后

^(0[1-9]|1[0-2])/d{4}$

请注意,\d现在只是d

通过将反斜杠字符加倍,您将告诉字符串解析器您希望在字符串值中使用单个实际的反斜杠。

实际上,这里没有理由不使用正则表达式语法:

var regEx = /^(0[1-9]|1[0-2])\/\d{4}$/g;

编辑 -我还注意到,有一个嵌入的“ /”字符,如果您使用正则表达式语法,则必须将其引号。

2020-04-25