使用正则表达式将日期/时间字符串拆分为标记

时间:2015-11-17 21:49:30

标签: javascript regex date

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

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

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

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

'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']

谢谢大家!

1 个答案:

答案 0 :(得分:4)

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

这样:

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

返回:

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