字符串能匹配一般重复字符,比如abdabcaca,执行var str="abdabcaca";
var reg=/(\w\w+).*\1/g;
str.match(reg);//abdab,caca这是可以的 ,但是有一个需求,比如abdabda,我想把ab找出来,然后在找出da,因为/g的全局匹配是从上一次匹配成功的后面开始匹配的,不知道正则表达式能否实现这个需求

解决方案 »

  1.   

    var str="abdabda";
    var reg=/(\w{2})(?=.*\1)/g;
    str.match(reg);使用右断言,js正则不支持左断言,用右断言也能完成不少事情
      

  2.   

    var str="abdabda";
    var reg=/(\w+)(?=.*\1)/g;
    str.match(reg);
    // 首个abd后边又出现过abd,所以abd符合匹配,然后从abd后的字母a开始下一组,只找到了a在后边有出现,所以a(第四个字母,不是第一个)也符合匹配
    1楼的是限定为两个字符长度,其他没区别
      

  3.   

    那样只能自己循环了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);