js正则表达式普通方式与构造函数方式匹配相同字符串得出的结果不同

var re = new RegExp("(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)","g"); var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/g; var c = "012"; document.write(re.test(c)); document.write("<br/>"); document.write(reg.test(c));
    正则表达上如上,一个得出的结果为true,一个为false。为什么呢?
 <script type="text/javascript">

    var re = new RegExp("(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)","g");
    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/g;
    var c = "012";

    document.write(re.test(c));
    document.write("<br/>");
    document.write(reg.test(c));
        </script>

上边的格式有点乱。整理一下

var reg = /(^1-9?(.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9].0-9?$)/g;
这句话中把 点 . 前面的\ 去掉,这不是在字符串中不需要转意

补充:你的原码中 re 与reg的正则表达式的值实际上是不一样的

reg :每个点 . 前面都比 re 多了个\