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

如何用正则提取类JSON字符串中的多组键值对?

解决类JSON字符串的键值对提取问题

你的原正则问题在于.*是贪婪匹配,会把冒号后到字符串结尾的所有内容都当成单个value,导致无法拆分多组键值对。针对Markdown图片自定义属性的场景(无需严格JSON语法),可以用这个正则来精准提取:

/(\w+)\s*:\s*(['"]?)(.*?)\2(?:\s*,\s*|(?=\}))/g

正则各部分说明:

  • (\w+):捕获键名,匹配字母、数字和下划线组成的属性名
  • \s*:\s*:匹配冒号,同时忽略前后可能的空格
  • (['"]?):捕获可选的单/双引号(如果值有包裹的话),用分组存起来后续引用
  • (.*?):非贪婪匹配属性值,遇到对应的闭合引号或者分隔逗号/右大括号就停止
  • \2:匹配和前面捕获的引号一致的闭合引号,保证引号成对
  • (?:\s*,\s*|(?=\})):匹配键值对之间的分隔逗号(带前后空格),或者最后一个键值对后的右大括号位置,非捕获组不影响结果提取

使用示例(JavaScript):

const attrStr = "{float: 'null', another: 'foo', align: center}";
const regex = /(\w+)\s*:\s*(['"]?)(.*?)\2(?:\s*,\s*|(?=\}))/g;
const attrs = {};
let match;

while ((match = regex.exec(attrStr)) !== null) {
  attrs[match[1]] = match[3];
}

console.log(attrs);
// 输出:{ float: 'null', another: 'foo', align: 'center' }

这个正则支持带引号或不带引号的属性值,兼容键值对间的任意空格,完全适配你提到的Markdown自定义属性解析场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:27:08