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

正则匹配成对label-value键值对 跳过无对应value孤立label

正则匹配label-value键值对误配对问题修复

问题根源

初始使用的正则模式:

"label" : "(.*)"[\s\S]*?"value" : "(.*)"

出现跨标签错配的核心原因是:两个键之间的[\s\S]*?惰性匹配逻辑没有做边界限制,匹配过程中允许跨过新出现的label字段,遇到没有对应value的孤立label时,会直接越过该节点向后查找最近的value,最终导致错误配对。

可用修复方案

使用带负向零宽断言的模式限制中间匹配范围,正则写法如下:

"label" : "([^"]*)"(?:(?!label)[\s\S])*?"value" : "([^"]*)"

关键改动说明

  • 将原模式中匹配引号内内容的(.*)替换为([^"]*):从匹配任意字符改为匹配除双引号外的任意字符,从根源避免跨引号匹配的问题,逻辑更严谨
  • 将原模式中匹配两键之间内容的[\s\S]*?替换为(?:(?!label)[\s\S])*?:每匹配一个字符前都会校验当前位置后方没有出现新的label字段,一旦中间碰到新的label节点就会终止当前匹配链路,不会出现跨过孤立label抢占后续value的问题

效果验证

针对包含孤立label的测试文本:

"label" : "Something ?",
blabla
blabla2
"value" : "NO"
blabla
"label" : "YouMad ?",
blabla
"label" : "Foo ?",
blabla
blabla2
"value" : "Bar"

模式最终返回的正确匹配结果为:

  • Something ? / NO
  • Foo ? / Bar

无对应value的孤立节点"label" : "YouMad ?"会被自动跳过,不会产生错误配对。

如果需要兼容键名和冒号之间存在任意数量空格、键名使用单引号等宽松JS格式,可以使用适配版本:

["']label["']\s*:\s*["']([^"']*)["'](?:(?!["']label["'])[\s\S])*?["']value["']\s*:\s*["']([^"']*)["']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:54:52