在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