【问题标题】:Regex for Google Calendar API date outputGoogle Calendar API 日期输出的正则表达式
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 对于像“2011 年 7 月 16 日星期六下午 6:30 到晚上 8:30”这样的范围,您将解析前半部分,在冒号上拆分第二部分,然后使用 Date.setHours() 和Date.setMinutes() 在原始值上获取第二个 Date 对象
猜你喜欢
  • 1970-01-01
  • 2012-12-17
  • 2020-08-11
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多