正则表达式匹配字符串重复的字符

JSShou 2017-11-13 03:13:04
字符串能匹配一般重复字符,比如abdabcaca,执行

var str="abdabcaca";
var reg=/(\w\w+).*\1/g;
str.match(reg);//abdab,caca

这是可以的 ,但是有一个需求,比如abdabda,我想把ab找出来,然后在找出da,因为/g的全局匹配是从上一次匹配成功的后面开始匹配的,不知道正则表达式能否实现这个需求
...全文
1301 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2017-11-13
  • 打赏
  • 举报
回复
那样只能自己循环了

var str="abdabda";
var arr = [];
for (var i = 0; i < str.length-2; i++) {
	var reg=/(\w\w+).*\1/;
	var rs = str.slice(i).match(reg);
	if (rs && arr.indexOf(rs[0])==-1)
		arr.push(rs[0]);
}
alert(arr);
文盲老顾 2017-11-13
  • 打赏
  • 举报
回复
var str="abdabda";
var reg=/(\w+)(?=.*\1)/g;
str.match(reg);
// 首个abd后边又出现过abd,所以abd符合匹配,然后从abd后的字母a开始下一组,只找到了a在后边有出现,所以a(第四个字母,不是第一个)也符合匹配
1楼的是限定为两个字符长度,其他没区别
文盲老顾 2017-11-13
  • 打赏
  • 举报
回复
var str="abdabda";
var reg=/(\w{2})(?=.*\1)/g;
str.match(reg);
使用右断言,js正则不支持左断言,用右断言也能完成不少事情

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧