如何用 HTML 标签替换包含字符串的文本?

How to replace text containing string with a HTML tag?

我正在尝试找出如何用 HTML 标记替换页面上与特定短语匹配的任何文本实例 - 内容应保持不变。

bold("Hello")

上面的代码应该替换为:

<b>Hello</b>

这是我目前使用的代码:

node.data = node.data.replace('bold("','<b>');
node.data = node.data.replace('")','</b>');

问题在于,它不是创建 <b> 标签,而是将 <> 转换为它们的 HTML 实体 - < >.

此外,将 ") 的所有实例替换为 </b> 似乎不切实际。

实现此目标的最佳方法是什么。

如有任何帮助,我将不胜感激,谢谢!

正则表达式可帮助您解决替换问题。

var str   = 'bold("Hello")';
var regex = /bold\("(.*?)"\)/;
str = str.replace(regex, "<b></b>");

console.log(str);

我假设您的意思不是字面意义上的页面上的所有文本,而是给定元素内的所有文本。 DucFilans 正则表达式是正确的,我将稍微修改他的答案以提供完整的工作解决方案:

var parserRules = [
  { pattern: /bold\("(.*?)"\)/g, replacement: '<b></b>' },
  { pattern: /italics\("(.*?)"\)/g, replacement: '<i></i>' }
];

document.querySelectorAll('.parse').forEach(function(tag) {
  var inner = tag.innerHTML;
  parserRules.forEach(function(rule) {
    inner = inner.replace(rule.pattern, rule.replacement)
  });
  tag.innerHTML = inner;
});
<div class='parse'>
  <div>bold("Hello") world <p> Rose italics("pink") slow bold("!") </p> </div>
  <div>bold("astiago") cheeeeeeese!</div>
</div>

您可以在 parserRules 数组中定义正则表达式模式和替换规则,然后将解析任何标有 'parse' class 的元素。一个警告是这将替换所有子元素,因此如果您依赖附加到子元素或类似内容的侦听器,您也需要注意这一点。