Javascript JS正则表达式:匹配一个或多个事件

Javascript JS正则表达式:匹配一个或多个事件,javascript,regex,Javascript,Regex,在一天结束时,我需要正则表达式匹配一个日期字符串的多个或单个事件 对于“12-2-2014”的单次出现,正则表达式/(\d+[-/\.]\d+[-/\.]\d+/就可以了 对于测试“12-2-2014 22-05-2033”,它将失败。当全局标志处于活动状态时,它将测试为正,但我最近学到了一个艰难的方法,即当使用全局标志时,我无法对正则表达式进行单元测试 感谢您的帮助 编辑:我现在正在使用QUnit进行测试。一个简单的测试用例是: test("REGEX TEST", function ()

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

对于“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(' ')));
    });

->每次评估我都会得到不同的结果…

我已经看了你的另一个问题,下面是我的解决方案,它允许你保留你的标志

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");
});

好吧,问题似乎不在这里,但在您进行单元测试的方式上。你不能仅仅因为测试系统有问题就拒绝在正则表达式中使用g标志。你说的“使用全局标志时,我不能对我的正则表达式进行单元测试”是什么意思?你能举个例子说明为什么会这样吗?但它显然也需要澄清。您在问题中没有提到这一点。@chrispolzer看起来您正在尝试对正则表达式进行单元测试。这是错误的。您应该使用正则表达式测试您的函数。当您处于正确的级别时,隐藏在具有g标志的函数中的正则表达式不会有问题。不,这会混淆问题。测试单元应该测试他的代码,而不是正则表达式。你确定你已经测试过了吗?因为String对象有方法
match()
…当然我不测试我的SO答案:)我已经更新了它。@测试应该反映应用程序代码中所做的事情。我假设应用程序应该从字符串中获取日期。测试也应该这样做。