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

如何编写正则表达式匹配重复的<tag>key</tag> value并提取键值对?

解决正则匹配键值对的问题

你遇到的问题很典型——默认的贪婪匹配会把后续所有内容都吞进去,导致只能拿到第一个键对应的“超大值”。要精准捕获每个键对应的、下一个<tag>出现前的内容,我们可以用正向预查来限制值的匹配边界,这是最简洁可靠的方案。

直接上可用的正则表达式:

/<tag>(.*?)<\/tag>(.*?)(?=<tag>|$)/g

拆解一下这个正则的逻辑:

  • <tag>(.*?)<\/tag>:和你之前的写法一样,非贪婪匹配标签内的键内容,作为第一个捕获组。
  • (.*?):非贪婪匹配值内容,作为第二个捕获组——这里的关键是后面的预查限制了它的匹配范围。
  • (?=<tag>|$):正向预查断言,确保匹配到下一个<tag>的开头或者字符串末尾就停止,完美避免了把后续的键值对包含进来。

测试示例

比如你的测试字符串:

<tag>key:</tag> value; <tag>key</tag> value

用这个正则全局匹配后,会得到两组结果:

  1. 第一组捕获:key:,第二组捕获:value;
  2. 第一组捕获:key,第二组捕获: value

如果你的值内容里可能包含<但不是<tag>的情况(比如<other>),这个正则也能正常工作,因为预查是精确匹配<tag>开头的位置,不会误判。

另外,如果你的正则引擎不支持正向预查(这种情况很少见),也可以用排除型匹配的写法,但相对繁琐一些:

/<tag>(.*?)<\/tag>([^<]+|<(?!tag>))*/g

不过还是优先推荐第一种正向预查的方案,可读性和维护性都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:35:39