从扩展对象javascript创建密钥对对象

从扩展对象javascript创建密钥对对象,javascript,regex,Javascript,Regex,我有一个这样的正则表达式: var regex = /(\d\d\/\d\d\/\d\d) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g; var match; while( match = regex.exec(chat)) { messages.push({ date: match[1], time: match[3], name: match[4], message: match[5]

我有一个这样的正则表达式:

    var regex = /(\d\d\/\d\d\/\d\d) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g;
var match;
while( match = regex.exec(chat)) {
    messages.push({
        date: match[1],
        time: match[3],
        name: match[4],
        message: match[5]
   });
}
这是一个正则表达式,用于读取下面的字符串并将其划分为几个对象属性

    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-yyyy
dd-mm-yy


无论哪一个匹配良好,我都要将其解析为
date
属性。但是当添加多个正则表达式以匹配[1]时,代码似乎失败了。

如果我理解正确,当日期的格式始终相同,并且您希望能够接受不同格式的日期时,代码可以工作

试试这个:

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;
不过请注意,第一个分隔符现在是匹配的,因此您必须调整创建对象的代码<代码>匹配[2]现在将成为分隔符,因此您必须执行以下操作:

    var regex = /(\d\d\/\d\d\/\d\d) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g;
var match;
while( match = regex.exec(chat)) {
    messages.push({
        date: match[1],
        time: match[3],
        name: match[4],
        message: match[5]
   });
}

那你要什么?匹配
dd/mm/yy
dd-mm-yyyy
dd-mm-yy
的表达式?从技术上讲,这也将匹配
dd/mm-yy
(即使这种输入可能非常不可能)。要在这两种情况下匹配相同的分隔符,您可以使用捕获组和反向引用:
(\d\d([\/-])\d\d\2\d{2,4})
(但随后还必须调整代码的其余部分)。我不知道是否是正则表达式,但这似乎返回了一个空数组。如果日期格式为dd/mm/yy,则返回正确的日期格式。