Javascript 是否有可能获得多个相同的捕获组?

Javascript 是否有可能获得多个相同的捕获组?,javascript,regex,Javascript,Regex,我有像亮橙色的袋子,里面有5个褪色的橄榄色袋子,5个时髦的西红柿袋,1个纯绿色袋子。 我想提取收纳袋的颜色,以及收纳袋的数量和颜色。因此,我的理想输出将包含[‘明亮的橙色’、‘5’、‘褪色的橄榄’、‘5’、‘时髦的西红柿’、‘1’、‘纯绿色’] 我尝试了以下正则表达式,但它没有满足我的要求: /^(\w+ \w+) bags contain (?:(\d+) (\w+ \w+) bag(?:s.|.|s, |, ))+$/ 这让我抓狂 [“亮橙色袋包含5个褪色的橄榄色袋、5个时髦的西红柿袋、1

我有像
亮橙色的袋子,里面有5个褪色的橄榄色袋子,5个时髦的西红柿袋,1个纯绿色袋子。

我想提取收纳袋的颜色,以及收纳袋的数量和颜色。因此,我的理想输出将包含
[‘明亮的橙色’、‘5’、‘褪色的橄榄’、‘5’、‘时髦的西红柿’、‘1’、‘纯绿色’]

我尝试了以下正则表达式,但它没有满足我的要求:

/^(\w+ \w+) bags contain (?:(\d+) (\w+ \w+) bag(?:s.|.|s, |, ))+$/
这让我抓狂

[“亮橙色袋包含5个褪色的橄榄色袋、5个时髦的西红柿袋、1个纯绿色袋。”、“亮橙色”、“1”、“纯绿色”]
这是容器的颜色,以及最后装载的数量和颜色

如果我将
+
更改为一个特定的数字,例如
{2}
,那么我将获得与该匹配数完全相同的字符串的正确输出,但我不想使用n正则表达式,其中n是最大匹配数,
{1,n}
给出与
+
相同的结果

我已经看过了,但它的答案指定了一个数字

每次组匹配时是否都要输出正则表达式


(我指定了JavaScript,因为我知道在某些情况下,is的正则表达式是不同的)

您可以使用正则表达式在行李描述之前匹配一个可选数字,并循环匹配以形成输出数组:

const str='明亮的橙色袋子包含5个褪色的橄榄色袋子,5个时髦的西红柿袋子,1个纯绿色袋子';
常量正则表达式=/(?:(\d+)\s+)(\w+\s+\w+)\s+行李?/g;
让结果=[];
while((arr=regex.exec(str))!==null){
if(arr[1]!==未定义)result.push(arr[1]);
结果推送(arr[2]);
}

控制台日志(结果)我不确定这是否在您的所有场景下都有效,但我想到的是:

函数逐项(字符串){
常量s=string.split(/\s*(?:,| contain)\s*/);

对于(i=0,m,v,l=s.length;等轴运动,如
[…s.matchAll(/(\d+)(\w+)(\w+)(\w+)行李?/g)]
?分别抓取
行李包含的
?如果您想要多个匹配或更精确,我会使用多个过程:首先抓取“数字…行李”块,甚至是您需要的子串,然后用第二个正则表达式分割每个块。捕获组将始终保留最后一个匹配项。这在很大程度上取决于您的实际用例,根据这里的一句话,似乎很难确定这一点——似乎有很多变体。这些答案之一解决了您的问题吗?如果没有,您能否提供更多信息来帮助回答这个问题吗?@Nick no。副本指出这是不可能的。