JavaScript/jQuery 不区分大小写的 RegEx 替换

JavaScript/jQuery case indifferent RegEx replace

我正在尝试找出如何对忽略大小写的字符串进行 RegEx 搜索,但是当它进行替换时,它应该保留原始大小写。

搜索 "adv" 应匹配 "Adv",但替换应匹配 "Adv" 而不是 "adv"

目的是'highlight'字符串中的文本。显然,如果有更简单的事情,我会洗耳恭听。

当前代码...

$("#SearchResults").append(appendString.replace(
    new RegExp($("#SearchInput").val(), "g"), "<strong>" + 
    $("#SearchInput").val() + "</strong>")
);

Karl 的方法是正确的,尽管您可能还需要转义特殊字符:

var value = $("#SearchInput").val();
var escaped = value.replace(/([\[\]\(\)\/\.\*\+])/g, "\");

// Regex: new RegExp(escaped, "gi");
// Replace with: "<strong>" + value + "</strong>");

编辑打字错误。

您需要用括号封装值,这将创建一个组,您将能够使用 $n 在替换字符串中获取该组,其中 n 是组的编号.索引从 1 开始。

所以使用那个:

appendString.replace(new RegExp('(' + $("#SearchInput").val() + ')', "gi"), "<strong></strong>");

请注意,这样使用正则表达式很危险,例如,如果我在输入中写入 (hello,它会抛出错误:无效的正则表达式。