gpt4 book ai didi

javascript - 匹配小时-分钟-秒 (hms) 持续时间字符串

转载 作者:行者123 更新时间:2023-12-05 05:42:28 26 4
gpt4 key购买 nike

我想将 hms 之前的数字匹配到它们各自的捕获组中。如果可能的话,我想匹配所有 3 个组。如果缺少一两个其他组,则匹配最后一组。

如下图和此 regex101 中所示,我目前有一个正则表达式
/(\d+)(?=h)|(\d+)(?=m)|(\d+)(?=s)/g,对于我的测试字符串,匹配 12 个每场比赛1组。

regex and string

但是我想要 7 场比赛。其中第一场比赛有3组,第2-4场比赛各有2组,最后3场比赛各有1组。

所以我想要:

  1. 第 1 场比赛:11h22m33s
    1. 第 1 组:11
    2. 第 2 组:22
    3. 第 3 组:33
  2. 第 2 场比赛:11 点 22 分
    1. 第 1 组:11
    2. 第 2 组:22
  3. 第 3 场比赛:11h33s
    1. 第 1 组:11
    2. 第 2 组:33
  4. 第 4 场比赛:22 分钟 33 秒
    1. 第 1 组:22
    2. 第 2 组:33
  5. 第 5 场比赛:11h
    1. 第 1 组:11
  6. 第 6 场:22m
    1. 第 1 组:22
  7. 第 7 场:33s
    1. 第 1 组:33

编辑

测试字符串可以包含在其他字符串中!例如。 08:00 + 11 点。参见 https://regex101.com/r/RWA9Oy/1

最佳答案

如果你需要确保整个字符串匹配模式,你可以使用

^(?!$)(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$

参见 regex demo .

如果需要从较长的文本中提取这些字符串,可以使用

\b(?=\w)(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?\b(?!\w)

参见 this regex demo .

详细信息:

  • ^ - 字符串的开始
  • (?!$) - 字符串不能在开头结束(=不能为空)
  • \b(?=\w) - 一个单词边界,右边的字符是一个单词 char(= 是字母、数字或 _)
  • (?:(\d+)h)? - 一个可选的非捕获组匹配一个或多个数字(将它们捕获到第 1 组)和一个 h 字母
  • (?:(\d+)m)? - 一个可选的非捕获组匹配一个或多个数字(将它们捕获到第 2 组)和一个 m 字母
  • (?:(\d+)s)? - 一个可选的非捕获组匹配一个或多个数字(将它们捕获到第 3 组)和一个 s 字母
  • $ - 字符串结尾
  • \b(?!\w) - 一个单词边界,其中右侧的字符不是单词 char 或位于字符串的末尾。

以防万一您希望在组件之间允许任意数量的空白,您可以添加 \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)

参见 this regex demoanother regex demo .

关于javascript - 匹配小时-分钟-秒 (hms) 持续时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72016685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com