如何将不区分大小写的搜索与正则表达式中的区分大小写的替换相结合?

时间:2017-11-13 20:36:16

标签: javascript regex

例如,假设我有以下文字:

"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>");

这是一个不区分大小写的搜索,但我在替换上丢失了案例。有没有办法在替换上保留案例?

2 个答案:

答案 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"