如何使用正则表达式突出显示文本
How to highlight text by using regex
我正在尝试编写一个脚本来帮助在与正则表达式匹配时突出显示。以下是我现在所做的示例。
var text = "SOMETHING ~WEIRDs~ AND Not WEIRD";
var regexp = /\b(WEIRD)\b/
var matches = text.match(regexp);
for (i = 0; i < matches.length; i++) {
var replace_all = RegExp(matches[i] + "(?![^<]*>|[^<>]*<\/)", "ig");
text = text.replace(eval(replace_all), "<span style='background- color:yellow'>" + matches[i] + "</span>");
}
console.log(text);
上面代码的输出是
SOMETHING ~<span style='background- color:yellow'>WEIRD</span>s~ AND Not <span style='background- color:yellow'>WEIRD</span>
我想要的输出是
SOMETHING ~WEIRDs~ AND Not <span style='background- color:yellow'>WEIRD</span>
我想知道的是,无论如何要写一个正则表达式包含正则表达式和提供的单词?或者有什么其他方法可以解决这个替换错误的问题
你的外部正则表达式没问题。问题在于循环中的内部 replace_all
正则表达式,因为它替换了找到的字符串的所有实例,无论它在原始字符串中的位置如何。
而是使用带有 replace()
的原始正则表达式,使用替换字符串中的匹配项,如下所示:
var text = "SOMETHING ~WEIRDs~ AND Not WEIRD";
var regexp = /\b(WEIRD)\b/
var text = text.replace(regexp, '<span style="background-color: yellow"></span>');
console.log(text);
此外,作为一般规则,永远不要使用 eval()
。 总是更好的解决方案或替代方案。
我正在尝试编写一个脚本来帮助在与正则表达式匹配时突出显示。以下是我现在所做的示例。
var text = "SOMETHING ~WEIRDs~ AND Not WEIRD";
var regexp = /\b(WEIRD)\b/
var matches = text.match(regexp);
for (i = 0; i < matches.length; i++) {
var replace_all = RegExp(matches[i] + "(?![^<]*>|[^<>]*<\/)", "ig");
text = text.replace(eval(replace_all), "<span style='background- color:yellow'>" + matches[i] + "</span>");
}
console.log(text);
上面代码的输出是
SOMETHING ~<span style='background- color:yellow'>WEIRD</span>s~ AND Not <span style='background- color:yellow'>WEIRD</span>
我想要的输出是
SOMETHING ~WEIRDs~ AND Not <span style='background- color:yellow'>WEIRD</span>
我想知道的是,无论如何要写一个正则表达式包含正则表达式和提供的单词?或者有什么其他方法可以解决这个替换错误的问题
你的外部正则表达式没问题。问题在于循环中的内部 replace_all
正则表达式,因为它替换了找到的字符串的所有实例,无论它在原始字符串中的位置如何。
而是使用带有 replace()
的原始正则表达式,使用替换字符串中的匹配项,如下所示:
var text = "SOMETHING ~WEIRDs~ AND Not WEIRD";
var regexp = /\b(WEIRD)\b/
var text = text.replace(regexp, '<span style="background-color: yellow"></span>');
console.log(text);
此外,作为一般规则,永远不要使用 eval()
。 总是更好的解决方案或替代方案。