使用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 ..)
https://regex101.com/r/ZwXr4Y/1显示有关HTML实体和HTML评论的剩余问题。
当搜索问题时,不会忽略
,HTML实体和注释中的所有文本都应该被忽略。因此,搜索“b”时,即使HTML实体在HTML标记之间正确,也不应与
匹配。
答案 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;
})
说明:
当您经历更多不同的情况时,我不得不修改RegEx以涵盖更多可能的情况。但是现在我带来的这个几乎覆盖了所有情况。工作原理:
<script>
标记及其内容CDATA
块(e)
)这样做可以让我们快速操纵目标。例如。将其包装在标签中,如使用部分所示。在性能方面,我试着以一种表现良好的方式来写它。
此RegEx不能提供100%保证以匹配正确的位置(99%),但它应该在大部分时间给出预期结果,并且可以在以后轻松修改。
答案 1 :(得分:-1)
试试这个
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;这是结果