如何在javascript中使用regexp匹配所有重复子字符串?

如何在javascript中使用regexp匹配所有重复子字符串?,javascript,regex,Javascript,Regex,如何在javascript中使用regexp匹配所有重复子字符串 例如: 通过“abccddd123”获取[“cd”、“cd”、“cdcd”、“cdcdcd”、“cdcdcd”] +不工作: "abccdddcdcdcdcd123".match(/(cd)+/g) Array [ "cd", "cdcdcdcd" ] 这可以通过正面外观头来完成?=。这种类型的匹配不会向前移动光标,因此您可以多次匹配同一内容 var re=/cd(?=((cd)*)/g; var str=“abccdddcd

如何在javascript中使用regexp匹配所有重复子字符串

例如: 通过“abccddd123”获取
[“cd”、“cd”、“cdcd”、“cdcdcd”、“cdcdcd”]

+
不工作:

"abccdddcdcdcdcd123".match(/(cd)+/g)
Array [ "cd", "cdcdcdcd" ]

这可以通过正面外观头来完成
?=
。这种类型的匹配不会向前移动光标,因此您可以多次匹配同一内容

var re=/cd(?=((cd)*)/g;
var str=“abccdddcd123”;
var-m;
while(m=re.exec(str)){
console.log(m[0]+m[1]);

}
我想你也可以这样做

将捕获组放入前瞻断言中。
如果当前正则表达式位置自
最后一场比赛。但不是JS,您必须通过递增
lastIndex
手动执行此操作

可读正则表达式

 (?=
      (                             # (1 start)
           (?: cd )+
      )                             # (1 end)
 )
var re=/(?=(?:cd)+)/g;
var str=“abccdddcd123”;
var-m;
while(m=re.exec(str)){
console.log(m[1]);
++re.lastIndex;

}
我认为解决这种重叠匹配问题的常见方法如下:

/(?=((cd)+))cd
在一次向前移动卡雷特两个字符的同时,在一次向前移动中,将组中的内部模式匹配一次或多次。(我们也可以移动两个点

代码示例:

var re=/(?=((cd)+)cd/g;
var str=“abccdddcd123”;
var-m//var arr=新数组();
while(m=re.exec(str)){
//arr.push(m[1]);
console.log(m[1]);

}
您要求使用重叠的正则表达式。请注意,在JS中使用match很难在前瞻断言中获取捕获。改用重新执行方法。