Javascript RegEx 不工作

IT技术 javascript regex
2021-01-27 00:46:35

我有以下 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
            }
        }
    }

但是,对于我通过的任何值,我的 regEx 测试总是返回 false (02/2010)。我的代码有问题吗?我已经在各种 javascript 编辑器在线尝试了这段代码,它工作正常。

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;

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

第二种解决方案是错误的,需要对 / 进行转义。 ...0-2])\/\d{4...
2021-03-12 00:46:35
评论完就去修了,看到你改了。刚拿的很快。
2021-03-14 00:46:35
非常有用,非常感谢;将在时间限制时接受。
2021-03-15 00:46:35
“这里真的没有理由不使用正则表达式语法” 如果你想连接你的表达式怎么办?一个来自被其他东西包围的图书馆?
2021-03-15 00:46:35
var regex1 = RegExp('^([0-2][0-9]|(3)[0-1](\/)(((0)[0-9])|((1)[0- 2]))(\/)d{4}$','g'); var str1 = '16/12/2018'; console.log(regex1.test(str1)); // 预期输出:true 当我在 regex101, 16/12/2018 中测试,返回 true,但是当我在我的 javascript 文件中使用它时,ity 总是返回 false,为什么?
2021-04-05 00:46:35