如何在javascript中使用regexp匹配所有重复的子串?
例如:通过"abccdddcdcdcdcd123“获取[ "cd","cd","cdcd","cdcdcd", "cdcdcdcd" ]
+
不工作:
"abccdddcdcdcdcd123".match(/(cd)+/g)
Array [ "cd", "cdcdcdcd" ]
发布于 2018-06-05 08:53:00
我想你也可以这样做。
将捕获组放在一个先行断言中。
如果当前正则表达式的位置没有改变,那么大多数引擎都会对其进行调整
最后一场比赛。但不是JS,您必须通过递增lastIndex
来手动完成。
可读的正则表达式
(?=
( # (1 start)
(?: cd )+
) # (1 end)
)
var re = /(?=((?:cd)+))/g;
var str = "abccdddcdcdcdcd123";
var m;
while (m = re.exec(str)) {
console.log( m[1] );
++re.lastIndex;
}
发布于 2018-06-05 12:52:18
我认为像这样的重叠匹配问题的常见解决方案应该是:
/(?=((cd)+))cd
在前视中一次或多次匹配组中的内部模式,同时将carret一次向前移动两个字符。(我们也可以移动两个点..
)。
代码示例:
var re = /(?=((cd)+))cd/g;
var str = "abccdddcdcdcdcd123";
var m; //var arr = new Array();
while (m = re.exec(str)) {
//arr.push(m[1]);
console.log(m[1]);
}
我们通过m[1]
从组1获得结果。
使用.push(m[1]);
将其添加到数组中。
https://stackoverflow.com/questions/50689353
复制相似问题