本帖最后由 staryjk 于 2012-04-20 16:33:39 编辑

解决方案 »

  1.   

    <script type="text/javascript">
    var a="123,223,456,556,789,432,334,505,651,389,011,012";
    var b=a.split(",");
    var c=/^(\d)(\d)\1$/;
    var d=/^(\d)\1(\d)$/;
    var e=/^(\d)(\d)\2$/;
    var m=0;
    for(var i=0;i<b.length;i++){
    if(c.test(b[i])||d.test(b[i])||e.test(b[i])){
    alert(b[i]);
    m++;
    }
    }
    alert(m+"个");
    </script>
    不嫌麻烦的话可以这样试试  不过貌似够龌龊的   哈
      

  2.   

    用LINQ操作简单            string number = "123,223,456,556,789,432,334,505,651,389,011,012";
                var qnumber1 = number.Split(',').Where(n => n.ToCharArray().Count() > n.ToCharArray().Distinct().Count());
                var qnumber2 = number.Split(',').Where(n => n.ToCharArray().Count() == n.ToCharArray().Distinct().Count());
                foreach (var q1 in qnumber1)
                {
                    Response.Write(q1 + "<br/>");
                }
                foreach (var q2 in qnumber2)
                {
                    Response.Write(q2 + "<br/>");
                }
      

  3.   


    <script type="text/javascript">
    function test(value){
    var length=value.length;
    var a=(value.length-value.replace(/([\d]?0[\d]?0[\d]?)|([\d]?1[\d]?1[\d]?)|([\d]?2[\d]?2[\d]?)|([\d]?3[\d]?3[\d]?)|([\d]?4[\d]?4[\d]?)|([\d]?5[\d]?5[\d]?)|([\d]?6[\d]?6[\d]?)|([\d]?7[\d]?7[\d]?)|([\d]?8[\d]?8[\d]?)|([\d]?9[\d]?9[\d]?)/gi,"").length)/3;
    var b=((length+1)-(a*4))/4;
    return {xiangtong:a,buxiangtong:b}
    }
    var TEST=test("123,223,456,556,789,432,334,505,651,389,011,012");
    document.write("相同的有" + TEST.xiangtong + "个;不相同的有:" + TEST.buxiangtong + "个")
    </script>
      

  4.   

    如果字符串中的数值位数不知道,或者字符串中用逗号分割的片段不是数值呢?var str = "123,223,465,556,789,432,334,505,651,389,011,012";
    var arx = [], ary = [];
    str.replace(/[^,]+/g, function($){
        /^(?!.*(.).*\1).+$/.test($) ? arx.push($) : ary.push($);});alert("不同数值总数为:" + arx.length + "(" +arx.join(",") + ")\
    \n相同数值总数为:" + ary.length + "(" +ary.join(",") + ")");
      

  5.   

    BTW:正则的实质是抽象,正则的具象为简洁;尽可能的抽象,最大限度去简洁;上面代码还不理想,自己脚得。
      

  6.   

    假如片段已经字符数固定是3个倒是好整些:var x, y, str = "123,223,465,556,789,432,334,505,651,389,011,012";alert("不同数值总数为:" + (x=str.match(/(?![^,]*([^,])[^,]*\1)[^,]{3}/g)).length + "(" + x.join(", ") + ")\
    \n相同数值总数为:" + (y=str.match(/(?=[^,]*([^,])[^,]*\1)[^,]{3}/g)).length + "(" + y.join(", ") + ")")
      

  7.   


    哦,那你引用内容里的表达式不就OK了?
    var str = "123,223,465,556,789,432,334,505,651,389,011,012";有相同数字的集合(数组) = str.match(/(?=[^,]*([^,])[^,]*\1)[^,]{3}/g); 其总数就是它的length。
    无相同数字的集合(数组) = str.match(/(?![^,]*([^,])[^,]*\1)[^,]{3}/g); 其总数就是它的length。如果只要总数不需知道是那些个数的话,也可以只调用上面任意一条正则求相应总数(length属性),再拿总片段数str.split(",").length减去它,就得到另外集合的总数了。
      

  8.   

    TEST DEMO:<script type=text/javascript>
    var str = "123,223,465,556,789,432,334,505,651,389,011,012";alert("有相同数字的总数为:" + str.match(/(?=[^,]*([^,])[^,]*\1)[^,]{3}/g).length);
    alert("无相同数字的总数为:" + str.match(/(?![^,]*([^,])[^,]*\1)[^,]{3}/g).length);//或者
    alert("有相同数字的总数为:" + str.match(/(?=[^,]*([^,])[^,]*\1)[^,]{3}/g).length);
    alert("无相同数字的总数为:" + [str.split(",").length - str.match(/(?=[^,]*([^,])[^,]*\1)[^,]{3}/g).length]);
    </script>
      

  9.   

    哦,酱紫的:在/(?=[^,]*([^,])[^,]*\1)[^,]{3}/g中,“[^,]{3}”是说匹配不是逗点“,”的3个连续字符,前面的“(?=[^,]*([^,])[^,]*\1)”是正向预查判定(类似if(){}条件语句),意思是说匹配的3个连续字符片段必须符合“?=”后面的结构模式:[^,]*([^,])[^,]*\1 —— 这3个连续字符中至少有1个字符四重复的。这样类比可能好理解些:if([^,]*([^,])[^,]*\1){[^,]{3}}—— 搜索字符串中的非“,”的3个3个一起的连续字符片段,如果里面有字符相同,就提取它并逐一push到一个数组中。/(?![^,]*([^,])[^,]*\1)[^,]{3}/g的含义和过程也一样的,只是3个3个一起的字符片段结构不匹配“?!”后面匹配的,可类比理解为:if(![^,]*([^,])[^,]*\1){[^,]{3}}。在[^,]*([^,])[^,]*\1中,“\1”指与前面小括号中相同的1个元素“([^,])”。正则这东西,主要靠自己多多练习意会,很难言传,真的。
      

  10.   

    哦,上面还是把顺序说反了。先是正向预查:“(?=[^,]*([^,])[^,]*\1)”和“(?![^,]*([^,])[^,]*\1)”,从左到右预先查找到与表达式“[^,]*([^,])[^,]*\1)”匹配((?=...))和不匹配((?!...))的片段,再看片段字符数是否连续3个,是则push到一个数组,否则丢弃它,添加“g”参数搜索(同时push)完整个字符串以后再返回该数组(集合)。
      

  11.   

    <script type="text/javascript">var st = '004,014,052,055,062,065,070,101,110,148,152,154,166,169,188,198,206,209,237,245,246,247,249,252,255,263,264,265,267,273,287,313,334,340,342,355,366,371,372,404,440,443,448,454,479,484,492,522,528,531,535,541,546,551,555,573,626,634,636,641,647,656,658,673,675,679,680,684,695,696,697,704,705,715,762,770,787,792,796,812,813,830,832,833,836,842,852,872,873,875,905,908,913,921,937,945,947,966,968,970';
    var zu1 = 0, zu3 = 0, zu6 = 0;st.replace(/(\d)\1\1/g, function (){
    zu1++;
    return '';
    }).replace(/(\d)\1\d|(\d)\d\2|\d(\d)\3/g, function (){
    zu3++;
    return '';
    }).replace(/\d{3}/g, function (){
    zu6++;
    return '';
    });alert(['豹子:' + zu1,'组三:' +  zu3, '组六:' + zu6].join('\n'));</script>