1

我对正则表达式很陌生。我的字符串如下所示:

"6 years, 10 months, 1 days, 23 hours, 15 seconds"

基本上我希望匹配时间和单词的每个部分,因此来自 javascripts string.match 的结果数组如下所示:

[0] = "6 years"
[1] = "10 months"
[2] = "1 days"
[3] = "23 hours"
[4] = "15 seconds"

这是我尝试过的

/(\d{0,}\s(years|months|hours|days|seconds))/

但是这个正则表达式测试器显示我在我的反向引用http://rubular.com/r/qkyFJrBCq8中也捕捉到了每个单词

/(\d{0,}\s\w*)\,{0}/

当我尝试匹配逗号时,它就到处都是。http://rubular.com/r/PXoPHVibH0

我不确定该怎么做,而且我在匹配整个单词模式中读到的解释也不是很清楚。

一如既往,谢谢大家!

4

5 回答 5

7

您可以将split与更简单的正则表达式一起用于分隔符:

var str = '6 years, 10 months, 1 days, 23 hours, 15 seconds';
var result = str.split(/,\s*/g);

,\s*则表达式只匹配一个逗号,后跟任意数量的空格。

于 2013-06-05T23:29:31.123 回答
3

Paulpro 的答案似乎是最好的,但非捕获括号 (?:也应该适合你:

/(\d+\s(?:years|months|hours|days|seconds))/
于 2013-06-05T23:35:32.080 回答
2

你如何使用split功能?

对于正则表达式,您可以简单地使用此模式:

/[0-9]+\s*[a-z]/i
于 2013-06-05T23:36:12.837 回答
0

根据这个关于 SO 的答案,使用g带有正则表达式的标志来进行全局匹配。结果以数组的形式方便地返回:

var re = /(\d+\s(?:years|months|hours|days|seconds))/g;
var str = "6 years, 10 months, 1 days, 23 hours, 15 seconds";
var myArray = str.match(re);
alert(myArray);

请注意,exec一次返回一个匹配项,而match一次返回数组中的所有匹配项。

在此处查看现场演示

于 2013-06-06T01:55:42.537 回答
0

如果你真的想匹配你拥有的模式,你的正则表达式的主要问题是括号的放置方式。此模式将匹配单个数字单位组合:

/(\d+\s((years)|(months)|(hours)|(days)|(seconds)))/
于 2013-06-05T23:32:37.613 回答