我很难过...
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 的后续解析 将重新创建所有字符串值对象属性的原始值.因此它将字符串中嵌入的特殊字符 back 转换为转义序列。您的正则表达式正在寻找特殊字符,而不是转义序列。
关于javascript - 正则表达式替换 JSON 字符串中的特殊字符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41732176/