从扩展对象javascript创建keypair对象

时间:2014-03-01 21:07:39

标签: javascript regex

我有这样的正则表达式:

    var regex = /(\d\d\/\d\d\/\d\d) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g;

这是一个正则表达式,用于读取下面的字符串并将其分成几个对象属性

    27/02/14 23:45:01: Tom: Ja

在上面的正则表达式的帮助下,我正在通过以下代码创建一个对象:

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

有时候日期看起来不像dd/mm/yy,而是像dd-mm-yyyydd-mm-yy

我希望将其解析为date属性的匹配项。但是当添加多个正则表达式以匹配[1]时,代码似乎失败了。

1 个答案:

答案 0 :(得分:3)

如果我理解正确,当日期格式相同时,您的代码就可以使用,并且您希望能够接受不同格式的日期。

试试这个:

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

上面的正则表达式应该接受正斜杠或破折号(通过说[\/-]),然后对于年份,接受2或4位数(通过说\d{2,4})。

修改

下面的评论者提出了一个很好的建议。如果要确保两种情况下的分隔符相同,则可以改为:

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

请注意,第一个分隔符现在是匹配项,因此您必须调整创建对象的代码。 match[2]现在将成为分隔符,因此您必须执行以下操作:

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