鍍金池/ 問答/Java  HTML/ 為什么str.replace()沒有效果

為什么str.replace()沒有效果

var obj1 = {
    "name": "",
    "children": [
        {
            "name": "第一句",
            "content": "1",
            "children": [
                {
                    "name": "第一句的子節(jié)點(diǎn)",
                    "content": "1children",
                    "children": [

                    ]
                }
            ]
        },
        {
            "name": "第二句",
            "content": "2",
            "children": [
                {
                    "name": "第二句的子節(jié)點(diǎn)",
                    "content": "2children",
                    "children": [
                        {
                            "name": "第二句的子節(jié)點(diǎn)的子節(jié)點(diǎn)",
                            "content": "2children2children",
                            "children": [

                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

var obj2 = {
    "name":"第一句的子節(jié)點(diǎn)",
    "content":"1children",
    "children":[]
};

var patt = new RegExp(JSON.stringify(obj2),'g');

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

上面這段代碼為什么沒辦法從obj1中剪掉obj2這一段呢?
輸出的結(jié)果還是完完整整的obj1,仿佛什么都沒操作過一樣

回答
編輯回答
逗婦惱

obj2轉(zhuǎn)化為Json字符串的值和obj1中obj1.children.children轉(zhuǎn)化為json字符串的值不一樣,console一下即可

2018年1月26日 13:22
編輯回答
苦妄

RegExp時(shí)需要轉(zhuǎn)義~

2018年7月25日 22:07
編輯回答
疚幼

var patt = JSON.stringify(obj2);

2017年6月9日 02:16
編輯回答
毀與悔

打開開發(fā)者工具,把patt打印出來,你會(huì)發(fā)現(xiàn),patt如下:

clipboard.png

我們知道[]在正則表達(dá)式里面是有特殊含義的,表示字符集,匹配[]里面的任意一個(gè)字符,單純看/[]/這個(gè)正則表達(dá)式,你會(huì)發(fā)現(xiàn)這個(gè)正則什么都匹配不了,因?yàn)?code>[]表示需要匹配這個(gè)字符集里面的任意一個(gè)字符,但是這個(gè)字符集是空的,所以任何一個(gè)字符都不能匹配這個(gè)字符集,所以/[]/什么都不匹配,[]patt的一部分,所以這個(gè)正則什么都不匹配。

你可以手動(dòng)將patt改成/{"name":"第一句的子節(jié)點(diǎn)","content":"1children","children":\[\]}/g,即將[]使用\去除特殊含義,你會(huì)發(fā)現(xiàn)替換成功了,截圖如下:

clipboard.png

所以你需要先將JSON.stringify(obj2)里面的[]進(jìn)行傳化,代碼如下:

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

效果截圖如下:

clipboard.png

2017年7月2日 17:43
編輯回答
溫衫

正則表達(dá)式?jīng)]有匹配到..

2018年1月13日 16:24
編輯回答
逗婦惱
var newData = JSON.stringify(obj1).replace(patt,'1111111111111');

改成

var newData = JSON.stringify(obj1).replace(JSON.stringify(obj2),'1111111111111');
2017年10月17日 14:57