【发布时间】:2022-01-18 18:51:00
【问题描述】:
我正在处理一些 HTML 文件,我正在尝试匹配 <li> 内的 <p> 标签内 <ul> 内
例如:
<ul>
<li>1</li>
<li><p>2</p></li>
<li>
<ul>
<li><p>3</p></li>
</ul>
</li>
</ul>
我的目标是将 <p> 标签(2 和 3)分别与它们最近的父标签 <li> 和 <ul> 标签匹配。
这是我正在使用的正则表达式
/<ul>.*?(<li.*?>).*?(<p.*?>.*?<\/p>)(.*?)(<\/li>)/gs
当我尝试在这样的 html 中匹配时会出现问题:
<ul>
<li>
<ul>
<li></li>
<p>4</p>
</ul>
</li>
</ul>
它匹配<p>标签和更远的父<li>和<ul>标签。
有人知道我该如何解决这个问题吗?
编辑:假设我需要使用正则表达式进行匹配。无论如何,我最终可能会像你们建议的那样在 JS 中使用选择器,但我仍然想知道这种模式是否有一个简单的修复方法,因为这个逻辑已经存在于我使用 Regex 的应用程序中。
【问题讨论】:
-
您真的需要将它们与正则表达式一起使用,还是将它们放在 js 脚本中对您想要对它们进行的操作有好处?在 HTML 上使用正则表达式通常是个坏主意,您可能不需要它
-
首先考虑使用CSS Selectors逻辑
-
我在下面发布了我的想法。顺便说一句,您不必写
.*?。.*表示 “0 或更多”,所以它已经是可选的了。 -
用正则表达式解析html可以是error prone。如果可能,请考虑使用 (dom) 解析器。
-
@Bousha 您要达到的最终目标是什么?因为它听起来像XY problem
标签: javascript regex