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

如何使用Ruby及正则表达式从带任意前缀的字符串中提取全部键值对

解决方案

核心问题说明

原有写法仅返回最后一个键值对的原因是:正则中重复使用捕获组时,每个捕获组仅会保留最后一次匹配的结果,你将键值对匹配规则放在了重复分组+内部,因此只会留存最后一组捕获内容。

可行实现方案

两种方案均不会命中前面something部分的内容,符合你的要求:

方案1:先提取目标区间再扫描(逻辑清晰易维护)

先提取字符串末尾大括号包裹的内容,再对该区间单独扫描键值对:

s = "something {\"key\":\"value\",\"key2\":3}"
# 提取末尾大括号内部的内容
brace_content = s.match(/.*\{(.*)\}$/)[1]
# 扫描得到所有键值对
result = brace_content.scan(/([^:,]+):([^,}]+)/)
# 输出:[["\"key\"", "\"value\""], ["\"key2\"", "3"]]

方案2:单正则一步匹配

使用\G锚点限定匹配范围,该锚点会在上一次匹配结束的位置继续匹配,保证所有键值对仅在大括号内部命中:

s = "something {\"key\":\"value\",\"key2\":3}"
result = s.scan(/(?:.*?\{|\G(?!^))([^:,]+):([^,}]+)(?:[,}])/)
# 输出结果与预期一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:57:01