【问题标题】:Split a Date/Time String into Tokens with Regex使用正则表达式将日期/时间字符串拆分为标记
【发布时间】:2015-11-17 21:49:30
【问题描述】:

我正在尝试将日期格式字符串(和输入日期字符串)分解为部分(令牌)。

只要标记有效,日期格式就可以在标记之间使用任何分隔字符。日期/时间将被解析为格式,非字母数字字符将延续到输出字符串中。我想从日期/时间格式字符串和输入日期/时间字符串中删除标记。

我需要在所有非字母数字字符集上拆分字符串

例如,假设我的日期格式字符串是:

'dddd, MMMM D, YYYY h:mm A'

我想在字符串中有一个包含所有日期/时间标记的数组。我的输出应该是:

['dddd', 'MMMM', 'D', 'YYYY', 'h', 'mm', 'A']

我尝试了几次,但我仍然无法理解如何做到这一点。我能够想出正则表达式:

[^\w]|[_]

它应该匹配[a-zA-Z0-9_] 中不存在的任何字符作为第一个替代项,或者匹配_ 作为第二个替代项。

我已经测试过这个正则表达式并且它确实有效,但我怎样才能正确使用它?

我尝试使用:

var format_tokens = display_format.match(/[^\w]|[_]/g);

..当然,它还给了我:

format_tokens = [",", " ", " ", ",", " ", " ", ":", " "];

..这应该很明显...

那么我如何得到逆呢?我怎样才能得到想要的结果:

format_tokens = ['dddd', 'MMMM', 'D', 'YYYY', 'h', 'mm', 'A']

?

谢谢大家!

【问题讨论】:

  • 有什么原因不能使用str.split
  • @william.taylor.09 他们不只是用逗号分割,还有空格和冒号。
  • @DanielFlint,谢谢你,我的疏忽。在这种情况下,OP 可以用逗号替换所有空格和冒号,然后拆分,但这对于正则表达式可以做的事情来说似乎很愚蠢。
  • @william.taylor.09 不幸的是,您建议的拆分不适用于所有情况。用户可以使用任何有效的日期标记和他们想要的任何非字母数字字符来定义自己的日期格式。如果他们真的想要,他们甚至可以使用dddd?!MMMM-!-D,@YYYY#$h:mm*A,我需要返回与上面示例相同的内容。

标签: javascript regex date


【解决方案1】:

您想匹配字母数字字符并在其他所有内容上拆分/排除,对吗?这将是([a-zA-Z0-9]+)

这个:

'dddd, MMMM D, YYYY h:mm A'.match(/([a-zA-Z0-9]+)/g)

返回:

["dddd", "MMMM", "D", "YYYY", "h", "mm", "A"]

【讨论】:

  • 哈哈哈!我怎么能监督这个?感谢您的快速回复。我刚刚在 regex101 中对此进行了测试,它完全按照我的意愿工作,尽管我仍然无法再接受 5 分钟的回答!
猜你喜欢
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多