替换html标记内的单词

菲尔·诺弗利特

我的应用程序是文档查看器/阅读器。有一个搜索功能,用户可以在其中输入字符串,然后返回结果列表。此外,查询的出现会在页面上突出显示,以使其更加可见。搜索“类”,“样式”或其他也是html标签的词时会发生此问题。

content 只是这样的html字符串: "<div class='classname' style='stylename'>Words that are eligible for highlighting</div>

突出显示的单词应这样替换:

query = 'class'

"<div class='classname' style='stylename'>Words that are eligible for highlighting are in here, including words like class and style</div>

当应用程序尝试突出显示这些单词时,页面上的所有格式都会中断。这是我用来突出显示搜索查询的代码:

 searchContent(content){
  var searchQuery = SearchStore.getQuery()
  if (searchQuery) {
    var query = searchQuery.split(' ').map((q) => {
      if (q.length > 2) {
       return `\\b${q}\\b`;
     }
    }).join('|'); 
    if (query.length > 0) {
      //this is where the query is highlighted. It should not replace text inside <> tags
      content = content.replace(new RegExp(query, 'gi'), (value) => {
        return `<b style="background-color: yellow;">${value}</b>`;
      });
    }
  }
  return content;
}

有没有办法重写它,以便它检测何时替换html标签中的文本并防止页面损坏?

狼锤

从最基本的意义上讲,您可以通过标签和字符串进行正则表达式,并且只能对字符串进行替换。下面是简单的正则表达式,它假定标记在<和>之间。

var content = document.getElementById('content');
var html = content.innerHTML;

html = html.replace(/<[^>]*>|[^<>]*/g, function(m){

  // this is a tag, no replace
  if (m.charAt(0) === '<') {
    return m;
  }
  
  // this is not a tag, do replacement
  return m.replace(/class/g, function(m) {
    return "<span class='match'>" + m + "</span>"
  });
  
});

content.innerHTML = html;
b.test {
  color: #009999;
  background-color: white;
}

b {
  color: white;
  background-color: #009999;
}

span.match {
  color: blue;
  background-color:white;
}
<div id='content'>
  <b class='test'>class test</b>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何替换html标记内的值?

来自分类Dev

使用bash替换html标记内的文件

来自分类Dev

使用Perl仅匹配HTML标记内的单词

来自分类Dev

标记以HTML中的单词

来自分类Dev

Javascript RegEx替换HTML标记内的所有字符

来自分类Dev

Java:替换HTML标记内的ID(手动创建)

来自分类Dev

javascript-用html标记替换所有空格以包含剩余的单词

来自分类Dev

搜索字符串,将单词实例替换为其自身的副本,并用HTML标记包围

来自分类Dev

如何只在<p>标记中替换单词?

来自分类Dev

HTML标记内的Javascript

来自分类Dev

使用正则表达式用HTML标记内的填充替换“边距”

来自分类Dev

PHP-在HTML标记中查找单词

来自分类Dev

使用RazorEngine替换单词内的值

来自分类Dev

替换整个单词(方括号内)

来自分类Dev

用HTML标记+ \ n分析替换HTML结束标记

来自分类Dev

将HTML标记嵌入rails标记内

来自分类Dev

response.write在html结束标记后写入,如何从html内的响应中替换字符串?

来自分类Dev

算术替换内的命令替换是否会拆分单词?

来自分类Dev

jsf html标记内的值

来自分类Dev

<Script>标记内的HTML代码

来自分类Dev

html元素内的角度标记

来自分类Dev

替换HTML中的所有单词

来自分类Dev

多次替换html元素中的单词

来自分类Dev

PHP替换HTML标记以外的字符

来自分类Dev

自动将HTML标记替换为“ <br>”

来自分类Dev

用PHP替换所有HTML标记

来自分类Dev

用HTML元素替换文本标记

来自分类Dev

如何在PHP中用html标记替换%

来自分类Dev

在jQuery中用html标记替换特定字符