我有一个包含日期的字符串,该日期有很多格式可能。我匹配它的正则表达式变得荒谬而漫长。我希望学习更简洁的表达方式。这是各种格式。我想将每个日期作为自己的匹配项:

Sat Jul 16, 2011
Sat Jul 16, 2011 6pm to 8pm
Sat Jul 16, 2011 6pm to 8:30pm
Sat Jul 16, 2011 6:30pm to 8pm
Sat Jul 16, 2011 6:30pm to 8:30pm

Sat Jul 16, 2011 to Sun Jul 17, 2011
Sat Jul 16, 2011 6pm to Sun Jul 17, 2011 8pm
Sat Jul 16, 2011 6:30pm to Sun Jul 17, 2011 8pm
Sat Jul 16, 2011 6pm to Sun Jul 17, 2011 8:30pm
Sat Jul 16, 2011 6:30pm to Sun Jul 17, 2011 8:30pm

在我来这里提问之前,我已经明白了这一点:
([A-Z]{1}[a-z]{2} [A-Z]{1}[a-z]{2} [0-9]{1,2}, [0-4]{4} [0-9]{1,2}[ap]{1}m)( to ([A-Z]{1}[a-z]{2} [A-Z]{1}[a-z]{2} [0-9]{1,2}, [0-4]{4} [0-9]{1,2}[ap]{1}m))?

它将返回第一个日期,如果存在则返回第二个日期,但仅返回以下格式:Sat Jul 16, 2011 6pm to Sun Jul 17, 2011 8pm。那太荒谬了。

编辑:

Someone suggested我检查日期的“to”部分,并在每一侧运行正则表达式,而不是尝试一次解决所有情况。仍在寻找更简洁的解决方案,但这将大有帮助。

最佳答案

按照建议将日期分为两半,然后使用date.js解析这两个两半。然后是Date.parse('Sat Jul 16,2011 6:30 pm')

10-05 23:13