Javascript正则表达式从字符串文本中获取时间

时间:2016-03-28 23:02:04

标签: javascript regex timezone

我想检测一串文字,以便使用javascript从我的网页内容中获取时间。正则表达式应该能够匹配以下字符串的所有出现。

  • 10点PM CST
  • 12/10/2014 05:00 AM IST
  • 11-02-2015 23:00 CST
  • 05/2/2015美国东部时间下午10:00
  • 2015年1月23日02:00 IST
  • 04:00 AM CST

我尝试使用以下两个正则表达式,但它们尚未涵盖所有场景。

时间匹配

[0-9][0-9]:[0-9][0-9] (am|pm|AM|PM)

日期匹配

^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|
(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\1|
(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|
(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))(?:(?:1[6-9]|
[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)(?:0?2|(?:Feb))\3(?:(?:(?:1[6-9]|
[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|
[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|
(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|
(?:Oct|Nov|Dec)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

我使用RegEx已经太过分了,但它与上面的一些例子很匹配。关于我应该如何进行的任何建议?

1 个答案:

答案 0 :(得分:1)

请尝试:

/((?:(?:\d{1,2}(?:\/|-)){2}\d{4}\s+|\d{2}(?:rd|th|nd)\s+(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{4}\s+|)\d{2}:\d{2}(?:\s*(?:AM|PM))?\s+[IEC]ST)/g

REGEX 101 DEMO