[英]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.