代码之家  ›  专栏  ›  技术社区  ›  Domenic

我的约会正则表达式怎么了?[副本]

  •  13
  • Domenic  · 技术社区  · 14 年前
    var dateRegex = /\/Date\((\d+)\)\//g;    // [0-9] instead of \d does not help.
    dateRegex.test("/Date(1286443710000)/"); // true
    dateRegex.test("/Date(1286445750000)/"); // false
    

    Chrome和firefoxjavascript控制台都证实了这一点。搞什么鬼,伙计们?

    编辑:更简单的测试用例:

    var dateRegex = /Date\(([0-9]+)\)/g;
    dateRegex.test("Date(1286445750000)"); // true
    dateRegex.test("Date(1286445750000)"); // false
    dateRegex.test("Date(1286445750000)"); // true
    dateRegex.test("Date(1286445750000)"); // false
    dateRegex.test("Date(1286445750000)"); // true
    

    这表明它在每次。。。

    2 回复  |  直到 8 年前
        1
  •  26
  •   Nick Craver    14 年前

    在您的情况下,请移除 g

    var dateRegex = /\/Date\((\d+)\)\//;
    dateRegex.test("Date(1286445750000)"); // true
    dateRegex.test("Date(1286445750000)"); // true
    dateRegex.test("Date(1286445750000)"); // true
    dateRegex.test("Date(1286445750000)"); // true
    dateRegex.test("Date(1286445750000)"); // true
    

    这是ECMAScript 3中正则表达式实现方式的一个缺陷, there's a great post on the details here .

        2
  •  1
  •   TheVillageIdiot    14 年前

    /g 引起了问题。下面的代码可以正常工作。

    <div id="test"></div>
        <script type="text/javascript">
            var reg = /Date\(\d+\)/; //REGEX WITHOUT g
            var d="Date(1286445750000)";
            $(function(){
                var $d=$("div#test");
                for(var i=0;i<100;i++){
                    if(reg.test(d)){
                        $d.html($d.html()+"<br/>Matched: ["+d+"]");
                    }
                    else{
                        $d.html($d.html()+"<br/>Not Matched: ["+d+"]");
                    }
                }
            });
        </script>