var obj1 = {
"name": "",
"children": [
{
"name": "第一句",
"content": "1",
"children": [
{
"name": "第一句的子节点",
"content": "1children",
"children": [
]
}
]
},
{
"name": "第二句",
"content": "2",
"children": [
{
"name": "第二句的子节点",
"content": "2children",
"children": [
{
"name": "第二句的子节点的子节点",
"content": "2children2children",
"children": [
]
}
]
}
]
}
]
}
var obj2 = {
"name":"第一句的子节点",
"content":"1children",
"children":[]
};
var patt = new RegExp(JSON.stringify(obj2),'g');
var newData = JSON.stringify(obj1).replace(patt,'1111111111111');
console.log(newData);
上面这段代码为什么没办法从obj1中剪掉obj2这一段呢?
输出的结果还是完完整整的obj1,仿佛什么都没操作过一样
打开开发者工具,把
patt
打印出来,你会发现,patt
如下:我们知道
[]
在正则表达式里面是有特殊含义的,表示字符集,匹配[]
里面的任意一个字符,单纯看/[]/
这个正则表达式,你会发现这个正则什么都匹配不了,因为[]
表示需要匹配这个字符集里面的任意一个字符,但是这个字符集是空的,所以任何一个字符都不能匹配这个字符集,所以/[]/
什么都不匹配,[]
是patt
的一部分,所以这个正则什么都不匹配。你可以手动将
patt
改成/{"name":"第一句的子节点","content":"1children","children":\[\]}/g
,即将[]
使用\
去除特殊含义,你会发现替换成功了,截图如下:所以你需要先将
JSON.stringify(obj2)
里面的[]
进行传化,代码如下:效果截图如下: