我有这样的正则表达式:
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-yyyy
或dd-mm-yy
。
我希望将其解析为date
属性的匹配项。但是当添加多个正则表达式以匹配[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]
});
}