我试图突出显示字符串的一部分,它等于另一个变量值。
例如
var string = 'This Is A Test String';
var findWord = 'test';
结果应该是
'This Is A <b>Test</b> String'
请注意不区分大小写,并且我要求使用变量来传递'find / Replace word'
我需要这样做的原因是为了保持字符串的确切形式/大小写,其中is ==到搜索词。
在PHP中,这是有效的,所以基本上我是在等同于
的JS之后preg_replace('/('.$search.')/i','<b>$1</b>',$val['name'])
对于正则表达式我不是很好,对某人来说这应该很简单。
答案 0 :(得分:3)
我建议:
var string = "This is a test string.",
needle = "test",
re = new RegExp(needle, "gi"),
newString = string.replace(re, "<strong>" + needle + "</strong>");
console.log(newString);
请注意,我使用<strong></strong>
而不是<b></b>
(故意),当然,您可以使用您喜欢的任何元素类型。此外,gi
标志:
g
用于全局搜索,而不是简单地在第一场比赛时停止,i
用于不区分大小写,因此'test'
将匹配Test
,tESt
等等... 已编辑以保留匹配的字符串/子字符串的大小写:
var string = "This is a Test string.",
needle = "test",
re = new RegExp(needle, "gi"),
newString = string.replace(re, function(a,b){
return "<strong>" + a + "</strong>";
});
document.getElementById('input').appendChild(document.createTextNode(string));
document.getElementById('result').innerHTML = newString;
已编辑以创建更具功能性/可重用性的方法:
function formatMatches(el, needle, wrapper) {
if (!el || !needle) {
return false;
}
else {
var re = new RegExp(needle, "gi"),
haystack = el.textContent,
o = '<' + wrapper + '>',
c = '</' + wrapper + '>';
return haystack.replace(re, function(a) {
return o + a + c;
});
}
}
var needle = "test",
el = document.getElementById('input'),
wrapper = 'strong';
document.getElementById('result').innerHTML = formatMatches(el, needle, wrapper);
参考文献:
答案 1 :(得分:1)
var str = 'This Is A Test String';
var w = 'test';
var result = str.replace(new RegExp(w, 'gi'), function(match) {
return "<b>" + match + "</b>";
});
编辑:或者,根据评论的建议,最后一行可以替换为:
var result = str.replace(new RegExp(w, 'gi'), "<b>$&</b>");