在JavaScript中,我正在寻找一个正则表达式来捕获字符串中的多个可选组。但至少有一个组应该存在。正则表达式:使用单个匹配捕获多个可选组
字符串:foo bar 12 seconds 3minutes 4h
正则表达式到目前为止:/(?:(\d+)\s?s(?:econds?)?)?(?:(\d+)\s?m(?:inutes?)?)?(?:(\d+)\s?h(?:ours?)?)?/gi
我需要捕捉12 seconds
3minutes
和4h
,只返回在各自小组的数值。
这些时间单位可以存在或交换。我的最终结果将需要看起来像这样:
12s 3m //['12', '3', undefined]
10 seconds //['10', undefined, undefined]
4hours //[undefined, undefined, '4']
3 minutes //[undefined, '3', undefined]
1hour 54seconds 7minutes //['54', '7', '1']
undefined
null
甚至一个空字符串。只要他们在各自的指数。
任何简单的方法来处理这与一个exec
或match
而不使用循环?
不,没有这样的方式,最干净的将运行3个单独的正则表达式,并以您想要的方式安排匹配。 –
同意@WiktorStribiżew。 12和秒之间的空间有效?我问,因为秒,分钟和小时的格式看起来不同(空格) – JBone
@JBone是的,它是有效的。这些字符串由用户编写。有些使用空间,有些则不使用。所以正则表达式说明了这一点。 – Marian