javascript - 如何使用正则表达式突出显示文本

标签 javascript jquery regex pcregrep

我正在尝试编写一个脚本来帮助在与正则表达式匹配时突出显示。下面是我现在所做的示例。

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">$1</span>');
console.log(text);

此外,作为一般规则,永远不要使用 eval()总是有更好的解决方案或替代方案。

关于javascript - 如何使用正则表达式突出显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46094947/

相关文章:

javascript - JQuery $(window).load 无法与 Jinja 模板正常工作

java - 理解正则表达式中的一些东西

Python 正则表达式排除下划线

javascript - html/javascript 如何知道属性是 bool 值而不是字符串

javascript - 当特定的 div 类发生变化时调用一个函数

regex - 禁止带有属性的 BBCode 标签中的空内容

javascript - 向变量添加一些内容

javascript - 从 javascript(调用 API)返回包含对象(__proto__)的错误 json

Javascript-如何使用函数找到数组的最小值?

javascript - 为什么 Material-UI 无法识别 theme.spacing 函数?