在同时包含数字和字母的字符串中分离数字和字母

13
我正在尝试分割以下(或类似的)字符串“08-27-2015 07:25:00AM”。 目前我使用了

var parts = date.split(/[^0-9a-zA-Z]+/g);

这导致

["02", "27", "2012", "03", "25", "00AM"]

问题出在00AM部分。我也希望它被分离。因此,完美的结果应该是:

["02", "27", "2012", "03", "25", "00", "AM"]

1
输入的格式是否始终是该日期格式? - gahooa
你是想要分割字符串还是获取字符串的实际部分? - Sergio Tulentsev
我确实在使用它来解析日期。Sergio,不确定你的意思。我想通过分割字符串来获取正确的部分。 - Ilya Tsuryev
4个回答

38
如果您正在寻找字母或数字序列,但不是混合序列,您可以这样做...
"08-27-2015 07:25:00AM".match(/[a-zA-Z]+|[0-9]+/g)

导致...

["08", "27", "2015", "07", "25", "00", "AM"]

|的任一侧,我们都有一个由一个或多个字母组成的序列和一个由一个或多个数字组成的序列。因此,当它遇到一个字母时,它会收集所有连续的字母,直到它达到一个非字母为止,然后收集所有连续的数字,以此类推。

任何其他字符都不匹配,因此它不会成为结果的一部分。


2
太完美了,它甚至可以将“02June2015”拆分。谢谢! - Ilya Tsuryev

2
var date = "08-27-2015 07:25:00AM";
var parts = date.replace(/([AP]M)$/i, " $1").split(/[^0-9a-z]+/ig);

var date = "05June2012";
var parts = date.replace(/([a-z]+)/i, " $1 ").split(/[^0-9a-z]+/ig);

虽然你可以编写一个通用的分割器,但你需要知道在结果数组中期望什么。因此,我不确定它是否在解析方面有任何有用的目的,即如果您不知道输入的格式,则生成的数组将具有不同的大小,并且在不同位置具有不同类型的元素。你怎么知道该怎么做呢? - amit_g

0
如果日期格式总是一致的话,您可以使用以下代码:
```var parts = date.match(/([0-9]{2})-([0-9]{2})-([0-9]{4})\s([0-9]{2}):([0-9]{2}):([0-9]{2})(AM|PM)/).splice(1)```

0

我会使用一个日期库来解析你想要的字段。这样你就可以处理多种格式,而不用担心使用正则表达式进行解析。虽然DateJS有点老,但它在解析方面表现良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接