在JavaScript中替换/突出显示字符串 - 保持区分大小写

时间:2015-09-02 17:45:29

标签: javascript jquery

我想在一个句子中突出显示一个字符串。替换应该使用不区分大小写的字符(例如句子foo中的字符串My Foo bar)。

对我来说这没问题:

var regEx = new RegExp(this._searchString, "gi");
var label = $(item).text();
label = label.replace(regEx, '<span style="font-weight:bold;">' + this._searchString + '</span>');
$(item).html(label);

这里的问题是: 如果我在foo中搜索并替换My Foo bar,结果将是。{ My <span style="font-weight:bold;">foo</span> bar,但我想要的是My <span style="font-weight:bold;">Foo</span> bar

因此搜索应该忽略区分大小写,而不是替换。知道怎么做吗?我看到的唯一方法是首先检查字符串是否包含搜索到的字符串,提取它(具有区分大小写),修改它并将其放回字符串中。但这似乎对我来说太过分了,不是吗?

2 个答案:

答案 0 :(得分:4)

您必须通过将其包装在括号中并在替换字符串中使用$1引用来捕获组中的字符串。

编辑:我将匹配模式与\b包装在一起,仅匹配整个单词。

    var original_string = 'My Foo bar',
        variable = 'foo',
        regex = new RegExp('(\\b'+variable+'\\b)', 'gi'); // note the parentheses around variable
    console.log(original_string.replace(regex, 'precious $1 is really')); // here you reference the 1st capture with $1

答案 1 :(得分:1)

使用此方法:Javascript replace with reference to matched group?

.content > .product > anything > img
str = $("#test").text()

var regEx = new RegExp("foo", "gi");

str = str.replace(regEx, function(a,b){
    console.log(a)
	return '<span style="font-weight:bold;color:red">' + a + '</span>'
})

$("#test").html(str)