var str = 'AbCd';
   var k = 'aB';
   str = str.replace(new RegExp(k, 'gmi'), '<b>' + k + '</b>');
   document.write(str);将字符串中的‘ab’加粗,但是不改变大小写,该怎么写?PS:以为k值是变动的,不能直接写
str = str.replace(new RegExp(‘aB’, 'gmi'), '<b>Ab</b>');

解决方案 »

  1.   

    var str = 'AbCd';
    var k = 'aB';
    var re = new RegExp(k, 'gi');
    str = str.replace(re, '<b>' + re.exec(str)[0] + '</b>');
    document.write(str);
    这个意思?
      

  2.   

    楼上这位朋友的是可以的,使用re.exec(str)或str.match(re)都可以得到匹配项。下面的是考虑出现多个匹配项时的替换
    var str = 'AbCdab';
    var k = 'aB';
    var re = new RegExp('('+k+')',"gi");
    str = str.replace(re,"<b>$1</b>");
    alert(str);
      

  3.   


    是的,但是还有问题:
    k可能是str中不存在的字符,如k='E'
    我改成:
    str = re.exec(str) != null ? str.replace(re, '<b>' + re.exec(str)[0] + '</b>') : str;
    这样写k='aB'时又报错
    直接写成str = str.replace(re, '<b>' + re.exec(str)[0] + '</b>');时当k='E'时报错
    该怎么处理呢
      

  4.   

    你如果是匹配项一定是一个的话,考虑你说的问题,你用1楼朋友的代码应该这么用
    var str = 'AbCd';
    var k = 'E';
    var re = new RegExp(k, 'gi');
    var arr=re.exec(str);
    if(arr){
        str = str.replace(re, '<b>' + arr[0] + '</b>');
    };
    alert(str);或者,我在2楼回的,直接用就可以,没有这个问题
      

  5.   


    的确是的,追问:
    为什么直接
    str = re.exec(str) ? str.replace(re, '<b>' + re.exec(str)[0] + '</b>') : str;
    这么写却报错呢
      

  6.   

    参考下
    http://www.w3school.com.cn/js/jsref_exec_regexp.asp
    但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
      

  7.   

    因为你前面的条件判断re.exec(str)一执行,后面的就已经找不到匹配项了
    var str = 'AbCd';
    var k = 'aB';
    var re = new RegExp(k, 'gi');
    re.exec(str);//你加上这行代码,后面的就没用了
    str = re.exec(str) ? str.replace(re, '<b>' + re.exec(str)[0] + '</b>') : str;
    alert(str);
    所以,你即使是想那样使用,你也应该改成,使.exec()不重复使用,保证完整性
    var str = 'AbCd';
    var k = 'aB';
    var re = new RegExp(k, 'gi');
    var arr=re.exec(str);
    str = arr ? str.replace(re, '<b>' + arr[0] + '</b>') : str;
    alert(str);
      

  8.   

    var str = 'AbCd';
      var k = 'aB';
      str = str.replace(new RegExp(k, 'gmi'), '<b>$&</b>');
      document.write(str);