正则表达式匹配似乎没有工作的JavaScript

时间:2014-03-02 10:13:32

标签: javascript regex

我有一个像这样的regex.exec()函数:

var chat = reader.result;
var regex = /(\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g;
var messages = [];

var match;
while( match = regex.exec(chat)) {
        messages.push({
            date: match[1],
            time: match[2],
            name: match[3],
            message: match[4]
    });
}

匹配[1]似乎适用于几乎所有日期:dd / mm / yyyy到dd-mm-yy

但是,输入的格式如下:

22-2-2014 18:37:15: Andre: Moet nog 2,5 aflevering

它输出一个空数组messages

我真的不知道它来自哪里,但我相信它是正则表达式match[1],因为当输入为28/02/14 00:03:03: Tom: Je gaat nu de afweging maken

它返回一个对象数组就好了。

P.S。对于那些感兴趣的人,reader.result来自HTML5文件阅读器API。

编辑我已经用评论者发现的正则表达式中的错误更新了问题。尽管如此,即使使用较新的正则表达式,输入仍然会失败

2 个答案:

答案 0 :(得分:1)

看起来你的正则表达式错过了一个月的异常。 试试这个:

/(\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g

编辑:也包含在可选的单个数字日内。

答案 1 :(得分:1)

试试这个正则表达式(see demo link

 (\d\d[\/-]\d\d?[\/-]\d{2,4}) (\d\d:\d\d:\d\d): ([^:]+): (.*)

它匹配两者:

  

22-2-2014 18:37:15:Andre:moet nog 2,5 aflevering

     

22-12-2014 18:37:15:Andre:Moet nog 2,5 aflevering