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

如何用正则表达式获取第二个匹配标签?能否一步得到指定格式结果?

解决正则匹配目标aaaa并生成指定数组的问题

嘿,我来帮你搞定这个正则需求~咱们完全可以一步完成匹配并生成你想要的数组结构,不需要多次运行正则,只要用支持全局匹配和捕获组的现代正则引擎(比如JavaScript、Python、Java这些都没问题)就行。

先假设你的源文本结构(如果和实际有出入可以微调)

比如你的文本大概是这样的:

<sub>eeee</sub> 一些文本 <sub>aaaa</sub> 111
<sub>eeee</sub> 另一段内容 <sub>aaaa</sub> 222

一步实现的正则方案(以JavaScript为例)

直接用带全局匹配修饰符的正则,配合捕获组就能拿到目标结果:

// 源文本
const sourceText = `<sub>eeee</sub> 一些文本 <sub>aaaa</sub> 111
<sub>eeee</sub> 另一段内容 <sub>aaaa</sub> 222`;

// 正则表达式
const targetRegex = /<sub>eeee<\/sub>.*?<sub>(aaaa)<\/sub>\s*(\d+)/gs;

// 提取结果并组装成你要的数组
const result = [];
let matchResult;
while ((matchResult = targetRegex.exec(sourceText)) !== null) {
  // 捕获组1是目标的aaaa,捕获组2是关联数字,转成整数
  result.push([matchResult[1], parseInt(matchResult[2])]);
}

console.log(result);
// 输出:[ [ 'aaaa', 111 ], [ 'aaaa', 222 ] ]

正则逻辑拆解

  • <sub>eeee<\/sub>.*?:先匹配前面的<sub>eeee</sub>,然后用*非贪婪的.*?*匹配中间的任意内容(避免过度匹配到后面的无关内容),直到遇到目标的<sub>aaaa</sub>
  • <sub>(aaaa)<\/sub>:用捕获组(aaaa)精准提取你要的目标文本
  • \s*(\d+):\s*处理<sub>aaaa</sub>和数字之间的空格,(\d+)捕获后面的关联数字
  • gs修饰符:g表示全局匹配所有符合条件的内容,s让.可以匹配换行符(如果你的文本有换行的话)

额外提醒

如果你的文本里有嵌套的HTML标签(比如<sub>eeee</sub>里面还有其他标签),正则就不太靠谱了——毕竟正则天生不擅长处理嵌套结构。这时候更推荐用HTML解析库,比如JavaScript的cheerio、Python的BeautifulSoup,解析后再提取目标内容会更稳定。

内容的提问来源于stack exchange,提问作者TigerTV.ru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:28