JS Regex:匹配一个或多个匹配项

时间:2014-09-15 15:26:56

标签: javascript regex

在一天结束时,我需要正则表达式匹配日期字符串的多个或单个出现。

单次发生" 12-2-2014"正则表达式/(\d+[-/\.]\d+[-/\.]\d+)/会做。

对于测试" 12-2-2014 22-05-2033",它将失败。随着全局标志处于活动状态,它将测试为正,但我最近学到了很难,当使用全局标志时,我无法对我的正则表达式进行单元测试。

任何帮助表示赞赏...

编辑:我现在正在使用QUnit进行测试。一个简单的测试用例是:

 test("REGEX TEST", function () {
        var dates = ['12-2-2014', '14-5-2014'],
            regex = /(\d+[-/\.]\d+[-/\.]\d+)/g;
        ok(regex.test(dates.join(' ')));
        ok(regex.test(dates.join(' ')));
        ok(regex.test(dates.join(' ')));
        ok(regex.test(dates.join(' ')));
    });

- >我对每次评估都得到了不同的结果......

1 个答案:

答案 0 :(得分:1)

我已经看了你的另一个问题,这是我的解决方案,它可以让你保留你的旗帜。

test("Date entry should be a Date", function () {
    ok("10.12.2014".match(/(\d+[-/\.]\d+[-/\.]\d+)/g).length == 1, "Date is not parsed correctly: 10.12.2014");
    ok("10-12-2014".match(/(\d+[-/\.]\d+[-/\.]\d+)/g).length == 1, "Date is not parsed correctly: 10-12-2014");
    ok("10/12/2014".match(/(\d+[-/\.]\d+[-/\.]\d+)/g).length == 1, "Date is not parsed correctly: 10/12/2014");
});

以下是我提出的更多测试:

test("Invalid dates should be rejected", function () {
    ok("10#12#2014".match(/(\d+[-/\.]\d+[-/\.]\d+)/g).length == 0, "Date is not parsed correctly: 10#12#2014");
    ok("September".match(/(\d+[-/\.]\d+[-/\.]\d+)/g).length == 0, "Date is not parsed correctly: September");
});


test("Multiple Dates should be found", function () {
    ok("10.12.2014 11.13.2015".match(/(\d+[-/\.]\d+[-/\.]\d+)/g).length == 2, "Date is not parsed correctly: 10.12.2014 11.13.2015");
});