首先,这是关于以友好的格式向用户显示JSON,所以访问解析的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);
2015-04-06
KthProg
+1
匹配的正则表达式时的情况涉及到统计某种容器标记像括号或支架是很难的,而一般不是真的有可能。 “正则表达式无法计数”是我在自动机理论中学到的规则(很久以前,无可否认)。这是一个需要更强大类型的识别器/解析器的任务。 –
+0
@Pointy,上面的链接清楚地表明RegEx能够做到这一点。 –
+0
@PaulS。阅读我在顶部添加的评论,我必须解析JSON以获得漂亮的打印效果。 –