我想將 、 和 之前的數字匹配h到m它們s各自的捕獲組中。如果可能,我想匹配所有 3 個組。如果缺少一個或兩個其他組,則匹配最后一組。
如下圖和這個
但是I want7場比賽。其中第一個匹配包含 3 個組,第 2:nd 到 4:th 匹配每個包含 2 個組,最后 3 個匹配每個包含 1 個組。
所以I want:
- 第一場比賽:
11h22m33s- 第一組:
11 - 第 2 組:
22 - 第 3 組:
33
- 第一組:
- 比賽2:
11h22m- 第一組:
11 - 第 2 組:
22
- 第一組:
- 第 3 場比賽:
11h33s- 第一組:
11 - 第 2 組:
33
- 第一組:
- 第4場比賽:
22m33s- 第一組:
22 - 第 2 組:
33
- 第一組:
- 第 5 場比賽:
11h- 第一組:
11
- 第一組:
- 第6場比賽:
22m- 第一組:
22
- 第一組:
- 第 7 場比賽:
33s- 第一組:
33
- 第一組:
編輯
測驗字串可以包含在其他字串中!例如08:00 11h。見https://regex101.com/r/RWA9Oy/1
uj5u.com熱心網友回復:
如果您需要確保整個字串與模式匹配,您可以使用
^(?!$)(?:(\d )h)?(?:(\d )m)?(?:(\d )s)?$
請參閱正則運算式演示。
如果您需要從較長的文本中提取這些字串,您可以使用
\b(?=\w)(?:(\d )h)?(?:(\d )m)?(?:(\d )s)?\b(?!\w)
請參閱此正則運算式演示。
詳情:
^- 字串的開始(?!$)- 字串不能在一開始就結束(=不能為空)\b(?=\w)- 一個單詞邊界,右邊的 char 是一個單詞 char(= 是一個字母、數字或_)(?:(\d )h)?- 一個可選的非捕獲組匹配一個或多個數字(將它們捕獲到第 1 組)和一個h字母(?:(\d )m)?- 一個可選的非捕獲組匹配一個或多個數字(將它們捕獲到第 2 組)和一個m字母(?:(\d )s)?- 一個可選的非捕獲組匹配一個或多個數字(將它們捕獲到第 3 組)和一個s字母$- 字串結束\b(?!\w)- 一個單詞邊界,其中右側的字符不是單詞字符或字串末尾。
萬一您想在組件之間允許任何數量的空白,您可以添加\s*:
^(?!\s*$)\s*(?:(\d )\s*h\s*)?(?:(\d )\s*m\s*)?(?:(\d )\s*s)?\s*$
或者,對于部分匹配
\b(?=\w)(?:(\d )\s*h\s*)?(?:(\d )\s*m\s*)?(?:(\d )\s*s)?\b(?!\w)
請參閱此正則運算式演示和另一個正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464730.html
標籤:javascript 正则表达式
上一篇:如何使用演繹法選擇函式的回傳型別
