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

如何改进正则表达式以移除JSON对象中指定键值对(含数组值)

改进正则处理含数组/嵌套对象的JSON键值对移除

你的原正则问题出在值匹配范围太窄,只覆盖了字符串、数字和单词,没处理数组[]和嵌套对象{}这类复杂值,所以"UserId":[12,12,34]这种项没被匹配移除。以下是适配你场景的改进正则:

最终正则

(,\s*"(queueNumber|UserId|uniqueNumber)":\s*(?:"[^"]*"|\d+|\[[^\]]*\]|\{[^{}]*\}))|("(queueNumber|UserId|uniqueNumber)":\s*(?:"[^"]*"|\d+|\[[^\]]*\]|\{[^{}]*\})(\s*,)?)|(,\s*"[^"]*":\s*"name")|("[^"]*":\s*"name"(\s*,)?)

正则拆解(按匹配逻辑分块)

  1. 匹配带前置逗号的指定键项:(,\s*"(queueNumber|UserId|uniqueNumber)":\s*(?:"[^"]*"|\d+|\[[^\]]*\]|\{[^{}]*\}))
    • 覆盖数组(\[[^\]]*\]匹配[]包裹的所有内容)和单层嵌套对象(\{[^{}]*\}匹配{}包裹的所有内容),同时兼容字符串、数字值
  2. 匹配无前置逗号(开头)或带后置逗号的指定键项:("(queueNumber|UserId|uniqueNumber)":\s*(?:"[^"]*"|\d+|\[[^\]]*\]|\{[^{}]*\})(\s*,)?)
    • 处理键值对在JSON开头,或者后面跟着逗号的情况,避免残留逗号
  3. 匹配带前置逗号的"值为name"的项:(,\s*"[^"]*":\s*"name")
    • 精准匹配"field":"name"这类值为"name"的键值对(不管键名是什么)
  4. 匹配无前置逗号或带后置逗号的"值为name"的项:("[^"]*":\s*"name"(\s*,)?)
    • 同样处理开头或末尾的这类项

测试结果

将原JSON用此正则替换为空字符串后,得到:

{"cur":[{"objectName":"test"}]}

完全符合你的期望输出。

注意事项

  • 仅支持单层嵌套的JSON结构,多层嵌套(如数组里套对象)会失效
  • 不支持带转义字符的字符串(如"key":"val\"ue"),如果有这类场景需要额外调整转义处理逻辑
  • 重申:正则处理JSON是临时hack方案,仅适合固定简单结构的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:58:12