【问题标题】:RegEx: Capturing all individual instances of a repeating capture group [duplicate]正则表达式:捕获重复捕获组的所有单个实例 [重复]
【发布时间】:2019-12-05 21:15:44
【问题描述】:

我有一个可以按以下方式格式化的字符串:

user-style-1
user-style-1-bold
user-style-1-italic
user-style-1-bold-italic

我正在尝试(分别)捕获:

nothing (does not match)
-bold
-italic
-bold and -italic (as separate captures)

这是我的正则表达式:^user-style-\d+((-.+?)+?)$(也可能是^user-style-\d+(?:(-.+?)+?)$,因为我不关心完整的捕获,只关心其中的各个部分)。它捕获:

nothing
-bold
-italic
-bold-italic and -italic

或(替代)

nothing
-bold
-italic
-italic

我不太清楚如何让重复捕获组捕获所有单个实例,而不是整个事物,仅捕获最后一个实例或仅捕获最后一个实例。

【问题讨论】:

  • 啊,确实如此,因为我无法做我想做的事。谢谢!

标签: javascript regex


【解决方案1】:

看看这样的东西:

^user-style-\d+(-\w+)(-\w+)?$

Regex Demo

您需要为每个要捕获的模式创建一个组。请参阅ggorlen 发布的链接以及该问题的已接受答案以进行推理。

【讨论】:

  • 刚刚读到,不幸的是我试图让它成为动态的,我想我需要一个替代解决方案。
  • 只需捕获user-style-\d+ 之后的尾部并与之匹配第二次。
  • [...s.matchAll(/^user-style-\d+(\-[\w-]+)$/gm)].map(e => e.pop().match(/-\w+/g))
  • @ggorlen 太好了,谢谢!
【解决方案2】:

试试这个正则表达式:^user-style-1(-bold)?(-italic)?$ 它应该捕获所有 4 个案例

链接:https://regex101.com/r/p8NbIv/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-13
    • 2011-03-11
    • 2017-01-07
    • 2019-12-19
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2011-10-19
    相关资源
    最近更新 更多