正则表达式:捕获重复捕获组的所有单个实例 [重复]
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
【讨论】:
以上是关于正则表达式:捕获重复捕获组的所有单个实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章