捕获量词

Capturing quantifiers

我有一个正则表达式模式来捕获三个组:

(([abc])([abc])([abc]))

如何用其他方式重写它?

我试过:

(([abc]){1,3})

但只捕获到最后一组。

提前致谢。

除非您使用某些正则表达式引擎(我相信 .net 支持它),否则您无法以不同的方式执行此操作。如果您重复捕获组,则重复的匹配项将覆盖该捕获组的较早找到的匹配项。这就是为什么你最终只得到最后一场比赛的原因。

如果您不知道将出现多少个子模式实例,但您想在捕获组中捕获子模式的每个单独匹配项,这当然是一个限制。

根据(编程)环境,解决此问题的一种方法是将重复模式匹配为 1 个更大的捕获组,然后 运行 在找到的捕获上使用新的正则表达式。示例:

var inp = 'some string that matches regex & ac but we don\'t know how many letters after the regex';

var m = inp.match(/(regex).*?([abc]{1,3})/);
          
document.getElementById('out').value=m[2].match(/[abc]/g).join('\n');
<textarea id="out" rows="5" style="width:100%"></textarea>

如果我明白你的意思,你想将 "abc" 组作为一个整体捕获。例如,abcabcabc 而不是 abcabbc。 如果是这样,那么您应该使用 (abc){1,3}。参见 https://regex101.com/r/kX8aB7/3