【问题标题】:Regex - split string with delimiters into groups正则表达式 - 将带有分隔符的字符串分成组
【发布时间】:2020-11-11 20:54:58
【问题描述】:

需要解析如下字符串:

  1. object/custom/name1/name2
  2. object/custom/name1/name2/typea
  3. object/custom/name1/name2/typea/item

我期望得到的结果是:
group1: name1/name2
group2: typea
group3: item

只需要group1(具有名称的组)。其他组 (2,3) 是可选的。这取决于字符串。例如。对于第一个字符串应该只出现在字符串name1/name2的第一组。

字符串typea是静态字符串。

这里是游乐场的链接:https://regex101.com/r/j1ay1s/1/
或正则表达式:object\/(custom|standard)\/(.*)(?:\/(typea|typeb))(?:\/(.*))?

【问题讨论】:

  • 如果结构稳定,您可以只使用const [o, c, n1, n2, t, i] = s.split('/');ti 如果它们不存在,它们将是未定义的。)
  • name2 可以不存在。在这种情况下,group1 应该只包含 name1 参数。

标签: javascript regex


【解决方案1】:

您可以获得 3 个捕获组,使第二个和第三个可选,为type[ab] 使用字符类,不要为(custom|standard) 使用捕获组

object\/(?:custom|standard)\/(.*?(?=\/type[ab]|$))(?:\/(type[ab])(?:\/(.*))?)?

说明

  • object\/(?:custom|standard)\/ 匹配 object/custom/object/standard/
  • (.*?(?=\/type[ab]|$))group 1 中捕获尽可能少的字符,直到遇到 typea 或 typeb 或字符串结尾
  • (?:非捕获组
    • \/(type[ab]) 匹配 / 并在 group 2 中捕获 typeatypeb
    • (?:\/(.*))? 可选的非捕获组,匹配 / 并在 group 3 其余行中捕获
  • )?关闭非捕获组并使其可选

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多