我想找到一个高效且优雅的解决方案来解决这个问题:
我需要通过已替换的函数来替换字符串的子字符串,不区分大小写。
示例:
var highlight = function(inputString, filterString) {
var regex = new RegExp(filterString, 'gi');
return inputString.replace(regex, '<b>' + filterString + '</b>');
};
highlight('The input', 't');
如果您在浏览器控制台中运行此功能,那么您将获得:
"<b>t</b>he inpu<b>t</b>"
我的问题是我想保留被替换字符串的原始情况。因此,预期结果将是:
"<b>T</b>he inpu<b>t</b>"
有什么想法吗?
编辑:回复@georg:
return inputString.replace(regex, '<b>$&</b>');
答案 0 :(得分:5)
在替换中使用$&
,这意味着“找到了什么”:
var highlight = function(inputString, filterString) {
var regex = new RegExp(filterString, 'gi');
return inputString.replace(regex, '<b>$&</b>');
};
x = highlight('The input', 't');
document.write("<pre>" + JSON.stringify(x,0,3));
其他$...
魔法构造,供参考:
答案 1 :(得分:1)
$&安培;包含与最后一次模式匹配匹配的字符串。
请参考 https://msdn.microsoft.com/en-us/library/ie/3k9c4a32%28v=vs.94%29.aspx 了解更多详情。