为什么str.replace()没有效果

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,仿佛什么都没操作过一样

阅读 4.4k
6 个回答

打开开发者工具,把patt打印出来,你会发现,patt如下:

clipboard.png

我们知道[]在正则表达式里面是有特殊含义的,表示字符集,匹配[]里面的任意一个字符,单纯看/[]/这个正则表达式,你会发现这个正则什么都匹配不了,因为[]表示需要匹配这个字符集里面的任意一个字符,但是这个字符集是空的,所以任何一个字符都不能匹配这个字符集,所以/[]/什么都不匹配,[]patt的一部分,所以这个正则什么都不匹配。

你可以手动将patt改成/{"name":"第一句的子节点","content":"1children","children":\[\]}/g,即将[]使用\去除特殊含义,你会发现替换成功了,截图如下:

clipboard.png

所以你需要先将JSON.stringify(obj2)里面的[]进行传化,代码如下:

patt = new RegExp(JSON.stringify(obj2).replace(/\[|\]/g, "\\$&"), 'g');

效果截图如下:

clipboard.png

正则表达式没有匹配到..

新手上路,请多包涵

var patt = JSON.stringify(obj2);

obj2转化为Json字符串的值和obj1中obj1.children.children转化为json字符串的值不一样,console一下即可

var newData = JSON.stringify(obj1).replace(patt,'1111111111111');

改成

var newData = JSON.stringify(obj1).replace(JSON.stringify(obj2),'1111111111111');

RegExp时需要转义~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题