【发布时间】:2011-07-19 03:19:08
【问题描述】:
我有一个包含日期的字符串,它有很多格式的可能性。我匹配它的正则表达式变得荒谬而冗长。我希望学习更简洁的表达方式。以下是各种格式。我想将每个日期作为自己的匹配项:
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”部分,并在每一侧运行正则表达式,而不是试图同时考虑所有情况。仍在为它的每一方面寻找更简洁的解决方案,但这将有很大帮助。
【问题讨论】:
-
好吧,我首先要摆脱所有
{1}s,但仅此而已。实际上,如果您想验证日期,您的正则表达式会更长。正则表达式验证永远不会很漂亮。对于该建议,最简单的方法是为m to [A-Z]和m$编写一个if 语句正则表达式匹配,如果存在则使用2 日期匹配器,如果无法匹配则使用1 侧匹配器。
标签: javascript regex date