gpt4 book ai didi

html - RegExp 搜索 HTML 标签内的文本

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:02 25 4
gpt4 key购买 nike

我在使用 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

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

有人可以帮我吗?我已经为此工作了一个小时,但找不到解决方案(此处为 RegExp noob..)

更新 2

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

搜索剩下的问题是 没有被忽略,HTML实体和注释里面的所有文本都应该被忽略。因此,当搜索“b”时,它不应匹配  ,即使 HTML 实体正确地位于 HTML 标记之间也是如此。

最佳答案

更新 #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 block
  • 捕获所有 HTML 标签(开始/结束)
  • 捕获所有 HTML 注释(以及 IE if 条件语句)
  • 捕获剩余文本中最后一组中定义的所有目标字符串(此处为 (e) )

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

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

关于html - RegExp 搜索 HTML 标签内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39655923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com