解决方案 »

  1.   

    var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/([^m])(mm)\b/g, '$1<b>$2</b>'));
    javascript<b>mm</b> haha ,test string mmmmmmmmmmm 有很多<b>mm</b>,但只匹配连续的两个m
      

  2.   


    var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/(^|[^m])mm(?!m|$)/g, '$1{替换的内容}'));
      

  3.   

    对了,我要匹配的只有两个m, 结果就是mm 不是整个串。 而且 :有且仅有两个连续的m
      

  4.   


    我好像没说明白补冲下: 查询有且仅有两个连续的m。 我要匹配的只有两个m, 结果就是mm 不是整个串。 而且 :有且仅有两个连续的m
      

  5.   

    <script>
    var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/(mm(?!m))/g, '$1{替换的内容}'));
    </script>
    看一眼
      

  6.   

    <script>
    var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/((?:[^m+])mm(?!m))/g, '$1{替换的内容}'));
    </script>
    那个,不好意思,之前那个没考虑前边,光考虑后边了,呵呵,补充一下,呵呵。
      

  7.   

    <script>
    var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/((?:[^m]+)mm(?!m))/g, '$1{替换的内容}'));
    </script>
    好吧,这是最后一次,
      

  8.   


    这个还是不正确啊,大神!你已经把不是mm的也匹配上了这个东西是这样,把   /((?:[^m]+)mm(?!m))/g    改成   /((?:[^m]*)mm(?!m))/g  就行了,至于你说的把不是mm的也匹配,是因为你mm之前不能再有m了啊,(?:[^m]*)这部分是非捕获分组,可以理解为参与正则匹配,但是不会被捕获, (?!m)属于正则的零宽断言,也是不会被捕获的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head>
    <body>
    <script>
    var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/((?:[^m]*)mm(?!m))/g, '$1{替换的内容}'));
    </script>
    </body>
    </html>
    执行结果  :mm{替换的内容}javascriptmm{替换的内容} haha ,test string mmmmmmmmmmm{替换的内容} 有很多mm{替换的内容},但只匹配连续的两个m 
      

  9.   

    其实,我很尴尬,用这个吧,上边那个忘记考虑mmmmmmm的情况了
    <script>
    var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/((?:[^m]+|^)([m]{2})(?!m))/g, '$1{替换的内容}'));
    </script>
      

  10.   

    确实mmmmmmmmmmm{替换的内容}就是出问题了。
    或许我们简单的来匹配好了:<script type="text/javascript">
        var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个mm';
        document.write(str.replace(/(m+)/g,function(a){
            return a.length==2?"{匹配}":a;
        }));
    </script>
      

  11.   


    这个还是不正确啊,大神!你已经把不是mm的也匹配上了这个东西是这样,把   /((?:[^m]+)mm(?!m))/g    改成   /((?:[^m]*)mm(?!m))/g  就行了,至于你说的把不是mm的也匹配,是因为你mm之前不能再有m了啊,(?:[^m]*)这部分是非捕获分组,可以理解为参与正则匹配,但是不会被捕获, (?!m)属于正则的零宽断言,也是不会被捕获的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head>
    <body>
    <script>
    var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
    document.write(str.replace(/((?:[^m]*)mm(?!m))/g, '$1{替换的内容}'));
    </script>
    </body>
    </html>
    执行结果  :mm{替换的内容}javascriptmm{替换的内容} haha ,test string mmmmmmmmmmm{替换的内容} 有很多mm{替换的内容},但只匹配连续的两个m 不正确:1 要把mm替换掉,2、mmmmmmmmmm这个是不符合的
      

  12.   

    看来csdn不行啊,我在osc里,5个答案就有3个是正确的。
      

  13.   

    几位版主及xzy21com 给出的答案很不错,当然ivyandrich一直试图帮助我解决问题,十分感激啊!我这里有几个正确的:1、 ((?!m).|^)mm(?!m) 替换成 $1连上你要替换的内容,比如$1kk
    2、 str = str.replace(/((?!m).|^)(mm)(?!m)/g, function($0, $1, $2) { return '@'; });
    3、var reg=new RegExp('([^m]|^)m{2}([^m])',"gm"); out=str.replace(reg,"$1找到了$2");
    4、str = str.replace(/(m{2})/g, function($0, strTmp, index){
        if(str.charAt(index+2) != 'm' && (index > 0 ? (str.charAt(index-1 ) != 'm' ) : true) ){
          return '@';
        }else{
          return $0;
        }
    });
    5、xzy21com给出的答案