不区分大小写的搜索,但区分大小写的替换。

7

我有一个简单的正则表达式搜索和替换函数,并想知道是否有一种好的方法可以在大小写不敏感的搜索中进行区分大小写的替换?下面是一个示例:

function filter(searchTerm) {
    var searchPattern = new RegExp(searchTerm, 'ig');
    ....
    textToCheck = textToCheck.replace(searchPattern, '<span class="searchMatchTitle">' + searchTerm + '</span>');

在函数顶部的搜索词可能包含大写字母,我希望它能匹配任何包含大写或小写字母的字符串,因此使用了'i'标志。
当进行替换时,由于使用了原始搜索字符串(其中可能有不同格式),导致出现奇怪的结果。
我真的很想保留原始格式并在其周围添加标签。我的方法是最好的吗?如果是,您可以像Perl中那样使用组吗?例如:
s/ \(=\+\) /\1/g

我尝试使用类似的语法和网络上的示例,但只能得到字面字符串替换的结果。

2个回答

8
function filter(searchTerm) {
    var searchPattern = new RegExp('('+searchTerm+')', 'ig');
    ....
    textToCheck = textToCheck.replace(searchPattern, '<span class="searchMatchTitle">$1</span>');
    ...
}

1
太棒了!运行得非常好。对于像我这样的其他正则表达式小白来说:在正则表达式的其余部分周围加上开放和关闭括号是很重要的,否则你最终只会在输出中得到"$1"字面意思。 - Michael

3

您可以使用组,但语法略有不同。尝试像这样:

var str = 'this is a dog eat Dog eat DOG world'
str = str.replace(/(dog)/gi, '<span>$1</span>')

// str is now: "this is a <span>dog</span> eat <span>Dog</span> eat <span>DOG</span> world"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接