繁体   English   中英

是否可以通过正则表达式替换仅在结构顶层多次出现的 json 字符串中的值?

[英]Is it possible to replace a value in a json string that occurs multiple times only at the top level of the structure via regex?

嗨,

我有一个具有以下结构的 json 字符串:

{
   "version": "1.0.0",
   "dependencies": {
      "version": "1.0.0"
   }
}

它也可以是这样的:

{
   "dependencies": {
      "version": "1.0.0"
   },
   "version": "1.0.0"
}

或者像这样:

{ "version": "1.0.0", "dependencies": { "version": "1.0.0" } }

或者像这样:

{ "dependencies": { "version": "1.0.0" }, "version": "1.0.0" }

可以看出,该字符串包含 2 次名称“version”和值“1.0.0”。 一次在 json 结构的“顶层”,一次更深一层。

  • 名称“版本”之前/之后可以是其他名称/值对。
  • 名称“version”只能在顶层出现 1 次。
  • 名称“version”可以在更深层次上出现多次。

现在我想用另一个值替换值“1.0.0”,但只是顶级值,我试图为此定义一个正则表达式。 但到目前为止失败了。

我开始怀疑是否有可能定义这样的表达式。 潜在的问题似乎是名称的第一次命中不一定是顶级键(参见示例 2 和 4)。

如果有人能帮助我,那就太好了::)

根据您的 Java 版本(这是您使用的标签),这可能不起作用,因为它需要使用非固定宽度的前瞻和后视,但此正则表达式应该可用于 Java 或 JavaScript 的更高版本。

(?:(?<!(?:[\s\S]*\{[\s\S]*){2,})(?<="version" *: *")([\d\.]*)(?=")|(?<="version" *: *")([\d\.]*)(?=")(?!(?:[\s\S]*\}[\s\S]*){2,}))

大家可以自己测试看看效果如何,链接如下: https://regex101.com/r/6Q3KXQ/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM