簡體   English   中英

正則表達式替換 JSON 字符串中的特殊字符不起作用

[英]Regex replace of special characters in JSON string not working

我難住了...

http://codepen.io/anon/pen/rjjGEE

為什么 regex javascript 字符串替換具有特殊字符的字符串的工作,而不是轉換為字符串的對象?

let regex = /[\t\r\n]/g

var directString = "{'name':{'first':' billy bob ','last':'\n\rjoe\tblow'}}"
console.log(directString.replace(regex, "a"));

//Output: "{'name':{'first':' billy bob ','last':'aajoeablow'}}"


let obj = {
      name: {
        first: " billy bob  ",
        last: "\n\rjoe\tblow"
      },

    }

let objAsString = JSON.stringify(obj);
let stringifiedString = objAsString.replace(regex, "a")
console.log(stringifiedString)

//Output: "{'name':{'first':' billy bob  ','last':'\n\rjoe\tblow'}}"

//??? Why isn't \n\r and \t being replaced????

當您在字符串常量中使用諸如\\n\\t類的轉義符時(如您的第一個示例),您最終得到的是一個包含預期特殊字符(換行符或制表符)的字符串。

但是,當您對對象進行 JSON 編碼時,您最終得到的是一個包含轉義序列本身的字符串,而不是特殊字符。 JSON.stringify()所做的工作必須包括確保 JSON 的后續解析將重新創建所有字符串值對象屬性的原始值。 因此,它將字符串中嵌入的特殊字符轉回轉義序列。 您的正則表達式正在尋找特殊字符,而不是轉義序列。

不要嘗試使用正則表達式操作 JSON 字符串。 痛苦會隨之而來。

相反,請執行以下操作:

 var jsonString = String.raw`{"a": "foo\\nbar\\rbaz\\tqux"}`; var replaced = JSON.stringify(JSON.parse(jsonString, (key, value) => typeof value === 'string' ? value.replace(/[\\t\\r\\n]/g, '') : value )); console.log(replaced);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM