想替换字符串中的连续三个冒号(:::),替换为 <demo>,当出现三个以上时替换后三个,即::::aaa:::cd  为: <demo>aaa <demo>cd  而不是 <demo>:aaa <demo>cd 
帮帮忙,我正则表达式不很熟悉,这个貌似不复杂,但我就是不会

解决方案 »

  1.   

    var str = "::::aaa:::cd";
    str = str.replace(/:{3,}/g, "<demo>");
    alert(str);蹭分
      

  2.   


    var str = "::::aaa:::cd";
    str = str.replace(/(:{3})[^:]/g, "<demo>");
    alert(str);蹭分
      

  3.   


    var str = "::::aaa:::::cd";
    str = str.replace(/(:{3})([^:])/g, "<demo>$2");
    alert(str);
      

  4.   

    /\:{3,}/g,'demo'一楼的这个应该不要转义吧。:不是特殊符号吧。
      

  5.   

    首先感谢大家积极发言,不过1,2楼明显没看全我的意思:如果大于3个只替换后三个;
    3楼将会把冒号后面紧跟的a或c也替换了,所以结果页不对;
    /:{3}(?!:)/g  这个已通过验证
      

  6.   

    似乎这个正则不满足要求呢。
    只换后3个,不是出现3个及更多就换。var str = "::::aaa:::cd";
    str = str.replace(/(:*):::/g, "$1<demo>");
    alert(str);
      

  7.   

    能讲讲"$1 <demo>"是什么作用么?当然解决方法很多哈