【发布时间】:2021-03-19 07:23:40
【问题描述】:
我有 bright orange bags contain 5 faded olive bags, 5 posh tomato bags, 1 plain green bag. 这样的字符串
我想提取收纳袋的颜色,以及收纳袋的数量和颜色。所以我的理想输出应该包含['bright orange', '5', 'faded olive', '5', 'posh tomato', '1', 'plain green']。
我尝试了以下正则表达式,但没有给我想要的:
/^(\w+ \w+) bags contain (?:(\d+) (\w+ \w+) bag(?:s.|.|s, |, ))+$/
这让我很感动
["bright orange bags contain 5 faded olive bags, 5 posh tomato bags, 1 plain green bag.", "bright orange", "1", "plain green"]
容器颜色和最后包含的数量和颜色是什么。
如果我将 + 更改为特定数字,例如{2},然后我得到与匹配数量正好匹配的字符串的正确输出,但我不想做 n 正则表达式,其中 n 是最大匹配数,{1,n} 给出与+ 相同的结果.
我查看了this question,但它的答案指定了一个数字。
每次组匹配时是否有正则表达式输出?
(我指定了 JavaScript,因为我知道在某些情况下它的正则表达式会有所不同)
【问题讨论】:
-
类似
[...s.matchAll(/(\d+) (\w+) (\w+) bags?/g)]?单独抢bags contain?如果您想要多个匹配或更精确,我会使用多次传递:第一次获取“数字...袋子”块,甚至是您需要的子字符串,然后用第二个正则表达式切割每个块。捕获组将始终保持最后一场比赛。这在很大程度上取决于您的实际用例,这似乎很难根据这里的一句话来确定——似乎有很多变体。 -
这些答案之一是否解决了您的问题?如果没有,您能否提供更多信息来帮助回答?
-
@Nick 没有。副本指出做不到。
标签: javascript regex