从扩展对象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,则返回正确的日期格式。