如何在javascript中使用regexp匹配所有重复子字符串?
如何在javascript中使用regexp匹配所有重复子字符串 例如: 通过“abccddd123”获取如何在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
[“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很难在前瞻断言中获取捕获。改用重新执行方法。