我对正则表达式很新。我的字符串看起来像这样:
"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
我不确定究竟是怎么回事,而且我在阅读整个单词模式时所解释的解释也不是很清楚。
一如既往,谢谢大家!
答案 0 :(得分:7)
您可以使用split为分隔符设置更简单的正则表达式:
var str = '6 years, 10 months, 1 days, 23 hours, 15 seconds';
var result = str.split(/,\s*/g);
,\s*
正则表达式只匹配逗号后跟任意数量的空格。
答案 1 :(得分:3)
Paulpro的回答在这里似乎是最好的,但非捕获括号 (?:
也适用于你:
/(\d+\s(?:years|months|hours|days|seconds))/
答案 2 :(得分:2)
你如何使用split
函数?
对于正则表达式,您只需使用此模式:
/[0-9]+\s*[a-z]/i
答案 3 :(得分:0)
如果你真的想要匹配你的模式,你的正则表达式的主要问题是括号的放置方式。此模式将匹配单个数字单位组合:
/(\d+\s((years)|(months)|(hours)|(days)|(seconds)))/
答案 4 :(得分:0)
根据此answer on 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
一次返回数组中的所有匹配项。
请参阅live demo here。