Javascript:使用<b>标记突出显示字符串的一部分

Mik*_*sen 5 html javascript regex

我试图通过<b>在匹配的子字符串周围插入标签来突出显示字符串中的匹配项.例如,如果查询是"cat",则:

"I have a cat."
Run Code Online (Sandbox Code Playgroud)

应成为:

"I have a <b>cat</b>."
Run Code Online (Sandbox Code Playgroud)

同样,如果查询是"堆栈溢出",则:

"Stack Overflow is great."
Run Code Online (Sandbox Code Playgroud)

应成为:

"<b>Stack Overflow</b> is great."
Run Code Online (Sandbox Code Playgroud)

换句话说,我必须保留原始字符串的大小写,但在匹配时不区分大小写.

到目前为止我尝试的一件事是:

var regex = new RegExp('(' + query + ')', 'i');
return strResult.replace(regex, '<b>$1</b>');
Run Code Online (Sandbox Code Playgroud)

但是,如果查询中有任何括号,这会导致运行时异常,并且我认为尝试转义所有可能的正则表达式字符会太麻烦.

Frx*_*rem 3

有关如何转义特殊正则表达式字符的信息,请参阅“转义字符串中的正则表达式字符 - JavaScript ”,例如()

编辑:还要查看这个较旧的 SO 问题,它提出了一个非常相似 - 几乎相同 - 的问题。