javascript - RegEx 仅匹配 JSON 字符串中最里面的数组

标签 javascript regex json

首先,这是为了以友好的格式向用户显示 JSON,因此访问已解析的 JSON 对象不会有帮助

我知道 JS 中的 JSON 对象可以为我漂亮地打印 JSON,但是,我需要稍微修改该输出,这就是这个问题的目的。

在 JSON 中(由 JSON.stringify() pretty-print ):

{
  a:[
    {
      c: [
          "c",
          "d"
        ]
    }
  ]
}

我如何只匹配 [ “C”, “d” ]

惰性正则表达式 (/\[(?:\S*\s*)+?\]/g) 匹配

a: [
    {
      c: [
          "c",
          "d"
        ]

这不好。

我希望从最里面的数组中删除空格,以便从初始 JSON 中获得类似的内容:

{
  a:[
    {
      c: ["c", "d"]
    }
  ]
}

接受的答案完全符合我最初的要求,但我忘记提及数组元素之间也有空格,因此正则表达式替换似乎不是一个选项。

相反,我使用提供的正则表达式来匹配字符串,然后循环遍历匹配项并删除每个匹配项中的空格,然后用新字符串替换 JSON 数据中的初始匹配项。

这是代码:

var jsonData = JSON.stringify(obj, null, 2);
var matches = jsonData.match(/\[\s*[^\[\]]*?\s*\]/g);
jsonData = matches.reduce(function (json, match) {
    return json.replace(match, match.replace(/\s/g, ""));
},  jsonData);

最佳答案

\[\s*([^\[\]]*?)\s*\]

将仅匹配最里面的 [...] 并捕获组 1 中前导和尾随空格之间的所有内容,因此如果将其替换为 [$1],则将会得到您想要的结果。

result = subject.replace(/\[\s*([^\[\]]*?)\s*\]/g, "[$1]");

测试一下 live on regex101.com .

本质上,它是您找到的解决方案正在做的事情的一个不太复杂的版本,还有一个额外的好处,它可以在 JavaScript 中工作。另一个问题是 . 永远无法匹配 JavaScript 中的换行符,这与其他语言不同 - 如果您将 替换为 [\s\S],该正则表达式也可以工作(但对于这里的问题来说太过分了)。

关于javascript - RegEx 仅匹配 JSON 字符串中最里面的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29477766/

相关文章:

javascript - 为什么我的 Mongoose 删除命令返回空响应?

java - 获取具有特定前缀的整数 [Java]

ios - 如何在没有任何第三方库的情况下在 Swift 3.0 中使用 Alamofire 解析 JSON

json - Golang 未设置结构体字段

javascript - 使用 SkelJS 的断点 - 调整宽屏显示器?

Javascript 文本搜索和替换不适用于小书签

javascript - 如何在不知道谁有 dir 属性的情况下获取方向(rtl/ltr)?

regex - 戈朗 : functional programming in Go

regex - 使用 preg_replace 链接 DOI

javascript - 合并 json-object 并填充下一个/上一个项目