1

反斜杠正则表达式遇到一些麻烦。我想删除对象的任何字符串属性上存在的所有双反斜杠(或 2 的任何倍数)。我不想删除单个反斜杠,也不想删除奇数个反斜杠中的最后一个反斜杠(例如,在一组五个连续的反斜杠 \\\\\ -> \ 中留下一个反斜杠)。

代码在这里:

http://jsfiddle.net/59Zau/

//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 可以看出,其中一个反斜杠仍然存在。有谁知道我需要什么正则表达式来删除它们?

4

1 回答 1

6

问题出在您的 JSON 字符串中。"\\"已经有一个反斜杠。

>> console.log("No data \\passed in");
No data \passed in

您确定不想只删除所有反斜杠吗?

obj = obj.replace(/\\/g,"");

这样做会删除文字反斜杠,"\\"但仍会保留其他转义序列,"\n"因为在这些情况下,反斜杠只是在字符串文字中,而不是在实际字符串中。

于 2012-05-30T22:57:12.817 回答