例如,假设我有以下文字:
"Constants cons are CONTAGIOUS"
我想要所有" cons"无论情况如何都被替换,但保留替换的情况。
例如,假设我想在它们周围加上粗体标签,我希望输出为:
"<b>Con</b>stants <b>cons</b> are <b>CON</b>TAGIOUS"
在JavaScript中,我尝试过:
var re = new RegExp("con", 'ig');
var newText = text.replace(re,"<b>" + "con" + "</b>");
这是一个不区分大小写的搜索,但我在替换上丢失了案例。有没有办法在替换上保留案例?
答案 0 :(得分:4)
正如@JordanRunning在评论中指出的那样,
一个简单的解决方案是使用$&
:
"Constants cons are CONTAGIOUS".replace(/con/ig, "<b>$&</b>")
产地:
"<b>Con</b>stants <b>con</b>s are <b>CON</b>TAGIOUS"
另一个替代方案(我的原始建议)它使用捕获组(con)
,并在替换字符串中使用$1
引用它:
"Constants cons are CONTAGIOUS".replace(/(con)/ig, "<b>$1</b>")
答案 1 :(得分:4)
您可以将输入包装在捕获组()
中,并通过$1
替换回来:
var text = "Constants cons are CONTAGIOUS";
var regex = new RegExp("(con)", 'ig');
var newText = text.replace(regex, "<b>$1</b>");
console.log(newText); // "<b>Con</b>stants <b>con</b>s are <b>CON</b>TAGIOUS"
编辑:谢谢@JordanRunning,在这种情况下你甚至不需要捕获组,因为你要回到完整的匹配:
var text = "Constants cons are CONTAGIOUS";
var regex = new RegExp("con", 'ig');
var newText = text.replace(regex, "<b>$&</b>");
console.log(newText); // "<b>Con</b>stants <b>con</b>s are <b>CON</b>TAGIOUS"