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>');
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>');
var k = 'aB';
var re = new RegExp(k, 'gi');
str = str.replace(re, '<b>' + re.exec(str)[0] + '</b>');
document.write(str);
这个意思?
var str = 'AbCdab';
var k = 'aB';
var re = new RegExp('('+k+')',"gi");
str = str.replace(re,"<b>$1</b>");
alert(str);
是的,但是还有问题:
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'时报错
该怎么处理呢
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楼回的,直接用就可以,没有这个问题
的确是的,追问:
为什么直接
str = re.exec(str) ? str.replace(re, '<b>' + re.exec(str)[0] + '</b>') : str;
这么写却报错呢
http://www.w3school.com.cn/js/jsref_exec_regexp.asp
但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
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);
var k = 'aB';
str = str.replace(new RegExp(k, 'gmi'), '<b>$&</b>');
document.write(str);