gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:24:20 26 4
gpt4 key购买 nike

首先,这是为了以友好的格式向用户显示 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com