本帖最后由 lydehao2008 于 2014-09-17 01:29:12 编辑

解决方案 »

  1.   

    var arr = "123,345,123,123",
    reg = /([^,]+)(?!.*,\1)/g,
    res = arr.match(reg); //下面就说一下,捕获组的捕获顺序。
    //1:123首先被匹配到,但是因为后面有",123",所以被不被捕获
    //2:去除刚刚未被捕获的1,第一个捕获组的内容变成23,而后面却没有",23"被匹配,
    //所以,23被捕获,
    //3:23被捕获,则下次匹配,把第一个123都跳过了,
    //4:再次获得的捕获组就是345了,正常。
    //一直下去


    //所以,如果我们想要验证,那么就是,如果arr的内容如下:
    arr = "123,345,123,123,23",
    res = arr.match(reg);
    //想象这个时候的结果?
    //345,3,123,23a
    //就说第一个123的匹配
    //123会被",123"的因素被过滤
    //23会被",23"的因素被过滤
    //3会被",345"中的",3"被过滤。
    //OK,其他的都可以被理解了吧? console.log(res);

    //所以,关于数组去重,要考虑边界的
    //然后,再经过一些特殊的处理,比如下面这样:
    //仅供参考
    arr = ","+[123,345,123,123,23].join(",,")+",";
    reg = /(,[^,]+,)(?!.*\1)/g;
    res = arr.match(reg);
    console.log(res.join("").slice(1,-1).split(",,"));