正则表达式:捕获重复捕获组的所有单个实例 [重复]

Posted

技术标签:

【中文标题】正则表达式:捕获重复捕获组的所有单个实例 [重复]【英文标题】: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

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

【问题讨论】:

啊,确实如此,因为我无法做我想做的事。谢谢! 【参考方案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

【讨论】:

以上是关于正则表达式:捕获重复捕获组的所有单个实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式捕获多个重复模式模式

正则表达式:匹配单个数字重复n次

正则表达式捕获第一个和最后一个括号内的所有内容[重复]

用于python的正则表达式来捕获两个XML标签之间的所有内容[重复]

正则表达式 - 重复捕获组

在正则表达式(Javascript)中分隔捕获组[重复]