首先,这是以友好的格式向用户显示JSON,因此访问解析的JSON对象无法提供帮助。
我知道JS中的JSON对象可以为我打印JSON ,但是,我需要略微修改该输出,这就是这个问题的内容。
在JSON中(由JSON.stringify()
完美打印):
{
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);
答案 0 :(得分:1)
\[\s*([^\[\]]*?)\s*\]
只匹配最里面的[...]
并捕获组1中前导空格和尾随空格之间的所有内容,因此如果您将其替换为[$1]
,那么您将获得所需的结果。
result = subject.replace(/\[\s*([^\[\]]*?)\s*\]/g, "[$1]");
从本质上讲,它是一个不太复杂的版本,你找到的解决方案正在做什么,还有它在JavaScript中运行的额外好处。另一个问题是.
永远不会匹配JavaScript中的换行符,与其他语言不同 - 如果您将[\s\S]
替换为.
,那么正则表达式也会起作用(但是过度杀伤力)对于这里的问题)。