You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

负前瞻正则匹配异常:如何精准匹配含footnote的section内p标签

问题:为footnote类p标签添加基于父section的id属性

原始HTML结构

<section id="TP-1">
<h3>1. One</h3>
<p>Et harum quidem rerum facilis est et expedita distinctio.</p>
</section>

<hr class="sections" />

<section id="TP-2">
<h3>2. Two</h3>
<p>Et harum quidem rerum facilis est et expedita distinctio.</p>
<hr class="footnote" />
<p class="footnote"></p>
</section>

需求

为带有footnote类的<p>标签添加id属性,属性值基于其父<section>的id(例如父section的id为TP-2,则p标签的id设为TP-2-footnote)。

尝试的正则及问题

使用以下正则时出现匹配异常:

<section id="TP-(\d+?)">((.|\n)+?)(?!</section>)<p class="footnote"

实际匹配结果包含了无关的</section>标签及TP-1对应的section内容,预期仅匹配包含footnote的TP-2对应的section部分。

解决方案

修正后的正则

<section id="TP-(\d+)">((?:(?!</section>).|\n)*)<p class="footnote"

正则说明

  • 原正则中(.|\n)+?的非贪婪匹配无法有效阻止跨越</section>标签,因为负前瞻(?!</section>)仅检查当前位置后是否为</section>,而非确保整个中间内容不包含该标签。
  • 替换为(?:(?!</section>).|\n)*后,会匹配任意字符(含换行),但只要当前位置后不是</section>就继续匹配,彻底避免了跨越section结束标签的问题。

替换示例

将替换模式设置为:

<section id="TP-$1">$2<p class="footnote" id="TP-$1-footnote"

即可为目标p标签生成基于父section id的属性值。

内容的提问来源于stack exchange,提问作者abbassix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:30:22