Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1")
我应该这么做.它确保保留包含空格字符的字符串,并丢弃所有其他空格字符.所有JSON关键字(false
、true
、null
)必须用逗号或其他标点符号分隔,因此只需保留字符串中的空白.
The first option (\"(?:[^\"\\\\]|\\\\.)*\")
matches a double quoted string. The (...)
mean that the output is captured and available in the replacement as $1
. The [^\"\\\\]
matches any character except a double quote or escape character \
.
因为匹配是从左到右进行的,所以第二个选项\s+
不会匹配字符串中的空格.
所以我们匹配整个字符串,以及字符串外的空间.在前一种情况下,$1
是字符串标记,在后一种情况下,$1
是空字符串,因为没有使用组1.
这可以按预期工作,因为
- JSON中唯一可以包含空格的标记是双引号字符串.JSON中没有单引号字符串或注释.
- JSON语法要求所有多字符标记之间使用单字符标点,因此删除空格不会合并标记.在JavaScript中,这可能是有问题的,因为打破标记需要空间;
var x=0
不同于varx=0
,x - -(y)
不同于x--(y)
.