RegExp在HTML标记内搜索文本

时间:2016-09-23 08:15:11

标签: html regex search

使用RegExp在HTML标记之间搜索文本时遇到了一些困难。这是一种搜索功能,用于在HTML页面上搜索文本,而不会在HTML的标签或属性中找到匹配的字符。找到匹配后,我用div包围它,并为其指定一个高亮类,以突出显示HTML页面中的搜索词。如果RegExp也在标签或属性上匹配,则HTML代码正在变得腐败。

以下是HTML代码:

<html>
<span>assigned</span>
<span>Assigned > to</span>

<span>assigned > to</span>

<div>ticket assigned to</div>

<div id="assigned" class="assignedClass">Ticket being assigned to</div>

</html>

我提出的当前RegExp是:

(小于?=(大于))分配(?!\≤)(大于?!)/ GI

如果已分配,则匹配,或者Assigned是标记中文本的开头,但不在其他标记上。它可以很好地忽略属性和标签,但如果文本不是以搜索字符串开头,则效果不佳。

任何人都可以帮助我吗?我已经在这个工作了一个小时了但是可以找到解决方案(RegExp noob here ..)

更新2

https://regex101.com/r/ZwXr4Y/1显示有关HTML实体和HTML评论的剩余问题。

当搜索问题时,不会忽略&nbsp;,HTML实体和注释中的所有文本都应该被忽略。因此,搜索“b”时,即使HTML实体在HTML标记之间正确,也不应与&nbsp;匹配。

2 个答案:

答案 0 :(得分:1)

更新#2

正则表达式:

(<)(script[^>]*>[^<]*(?:<(?!\/script>)[^<]*)*<\/script>|\/?\b[^<>]+>|!(?:--\s*(?:(?:\[if\s*!IE]>\s*-->)?[^-]*(?:-(?!->)-*[^-]*)*)--|\[CDATA[^\]]*(?:](?!]>)[^\]]*)*]])>)|(e)

用法:

html.replace(/.../g, function(match, p1, p2, p3) {
    return p3 ? "<div class=\"highlight\">" + p3 + "</div>" : match;
})

Live demo

说明:

当您经历更多不同的情况时,我不得不修改RegEx以涵盖更多可能的情况。但是现在我带来的这个几乎覆盖了所有情况。工作原理:

  • 捕获所有<script>标记及其内容
  • 捕获所有CDATA
  • 捕获所有HTML标记(打开/关闭)
  • 捕获所有HTML注释(以及条件语句时的IE)
  • 捕获剩余文本中最后一组中定义的所有目标字符串(此处为 (e)

这样做可以让我们快速操纵目标。例如。将其包装在标签中,如使用部分所示。在性能方面,我试着以一种表现良好的方式来写它。

此RegEx不能提供100%保证以匹配正确的位置(99%),但它应该在大部分时间给出预期结果,并且可以在以后轻松修改。

答案 1 :(得分:-1)

试试这个

Live Demo

string.match(/<.{1,15}>(.*?)<\/.{1,15}>/g)

这意味着&lt;。{1,15}&gt;(。*?)&lt; /。{1,15}&gt; html标签之间的任何东西

 <any> Content </any>

将是目标或结果,例如

 <div> this is the content </content>

&#34;这是内容&#34;这是结果