Javascript 如何为两个对应模式之间的共享字符编写正则表达式?

Javascript 如何为两个对应模式之间的共享字符编写正则表达式?,javascript,regex,Javascript,Regex,我将在“caaab”中查找所有“aa”子字符串。所以,我使用了下面的正则表达式 /aa/g 使用引用的表达式,我希望JavaScript的match方法返回两个对应的模式。如您所见,中间的共享“a”导致两个“aa”模式!尽管如此,它只返回第一个。正则表达式有什么问题,如何解决 让foundArray=d.match(/aa/g)这里有一种方法。我们可以先记录输入字符串的长度,以便以后使用。然后,用空字符串替换a(?=a)。这将逐个替换输入中出现的子字符串aa。然后,我们可以将输出的长度与输入进行

我将在“caaab”中查找所有“aa”子字符串。所以,我使用了下面的正则表达式

/aa/g

使用引用的表达式,我希望JavaScript的match方法返回两个对应的模式。如您所见,中间的共享“a”导致两个“aa”模式!尽管如此,它只返回第一个。正则表达式有什么问题,如何解决


让foundArray=d.match(/aa/g)

这里有一种方法。我们可以先记录输入字符串的长度,以便以后使用。然后,用空字符串替换
a(?=a)
。这将逐个替换输入中出现的子字符串
aa
。然后,我们可以将输出的长度与输入进行比较,以计算发生了多少次
aa

var input=“caaab”;
var sLen=input.length;
变量输出=输入。替换(/a(?=a)/g,“”);
var eLen=输出长度;
log(“输入中有“+(sLen-eLen)+”aa出现”)使用前瞻
正如一篇关于正则表达式工作原理的评论中提到的:

它完全按照它的预期工作;一旦它消耗了一个角色,它就会经过它

匹配不会重叠,这不是js的限制,只是简单的

绕开它的方法是使用a,即a

Tim现有的答案已经做到了这一点,但可以简化如下:

匹配(/a(?=a)/g);
控制台日志(匹配)正则表达式没有什么问题,它完全按照它的预期工作;一旦它消耗了一个角色,它就会越过它,否则它将永远卡在第一个
aa