Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式不工作_Javascript_Regex - Fatal编程技术网

Javascript正则表达式不工作

Javascript正则表达式不工作,javascript,regex,Javascript,Regex,我有以下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

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

但是,对于我通过的任何值,我的正则表达式测试总是返回false(2010年2月)。我的代码有问题吗?我已经在各种javascript编辑器上在线试用过这段代码,效果很好。

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

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…
在我发表评论并看到您更改了它之后,我去修复它。我很快就完成了。“这里真的没有理由不使用正则表达式语法”如果您想连接表达式呢?一个来自被其他东西包围的库?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));//预期输出:当我在2018年12月16日的regex101中测试时,返回true,但当我在javascript文件中使用它时,它总是返回false,为什么?