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

如何用正则从JSON值中仅提取前N个字符?

解决正则提取JSON值前N个字符时的分隔符干扰问题

问题根源

你之前的正则针对带引号的字符串用[^"]匹配是有效的,但数字类型的值没有引号包裹,[^"]会把值后面的逗号也纳入匹配范围(因为逗号不属于引号),导致单字符数字值会带出逗号。

解决方案

1. 通用匹配正则(兼容字符串/数字类型)

直接匹配值的有效内容,排除逗号、右大括号、引号这些分隔符,同时限制取前N个字符(以N=2为例):

"目标键名":\s*(?<test>[^,\}"]{1,2})
  • 示例:
    • 提取sourceDisk前2个字符:"sourceDisk":\s*(?<test>[^,\}"]{1,2}) → 匹配结果in
    • 提取testNumber1前2个字符:"testNumber1":\s*(?<test>[^,\}"]{1,2}) → 匹配结果33
    • 提取testNumber3前2个字符:"testNumber3":\s*(?<test>[^,\}"]{1,2}) → 匹配结果3

2. 分类型精准匹配

如果能明确值的类型,可针对性写正则:

  • 字符串类型(带引号):
    "目标键名":\s*"(?<test>[^"]{1,2})
    
    只匹配引号内的内容,不会触及外部符号。
  • 数字类型(无引号):
    "目标键名":\s*(?<test>\d{1,2})
    
    仅匹配数字字符,自动排除后面的逗号。

3. 捕获完整值后再截取

如果允许后续处理,可先捕获完整的有效值,再截取前N个字符:

"目标键名":\s*(?:"(?<str_val>[^"]+)"|(?<num_val>\d+))
  • 字符串值会被捕获到str_val组,数字值到num_val组,之后从对应组的结果中截取前N个字符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:07