使用反斜杠正则表达式时遇到一些麻烦。我想删除对象的任何字符串属性上存在的所有双反斜杠(或2的任意倍数)。我不想删除单个反斜杠,也不想删除奇数个反斜杠中的最后一个反斜杠(例如,在一组五个连续反斜杠中保留一个反斜杠\\\\\ - > \)。
代码在这里:
//removes all dual backslahes on all string properties on an object
var removeDualBackslash = function (obj) {
var ret = null;
if (typeof(obj) == "string") {
obj = obj.replace(/\\\\/g,"");
return obj;
} else if (typeof(obj) == "number") {
return obj;
} else if (typeof(obj) == "array") {
ret = [];
} else {
ret = {};
}
for (var key in obj)
ret[key] = removeDualBackslash(obj[key]);
return ret;
};
var oJSON = {"t4m_data_in":{"no_data":"No data \\passed in."}};
oJSON = removeDualBackslash(oJSON);
console.log(oJSON.t4m_data_in.no_data);
从console.log中可以看到,其中一个反斜杠仍然存在。有谁知道我需要删除它们的正则表达式?
答案 0 :(得分:6)
问题出在您的JSON字符串中。 "\\"
已经有一个反斜杠。
>> console.log("No data \\passed in");
No data \passed in
您确定不想只删除所有反斜杠吗?
obj = obj.replace(/\\/g,"");
这样做会删除像"\\"
这样的文字反斜杠,但仍会保留其他转义序列,例如"\n"
,因为在这些情况下反斜杠只是在字符串文字中,而不是在实际的字符串中。