1

バックスラッシュの正規表現に問題があります。オブジェクトの文字列プロパティに存在するすべての二重バックスラッシュ (または 2 の倍数) を削除したいと考えています。単一のバックスラッシュも、奇数個のバックスラッシュの最後のバックスラッシュも削除したくありません (たとえば、5 つの連続したバックスラッシュ \\\\\ -> \ のセットに 1 つのバックスラッシュを残します)。

コードは次のとおりです。

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 からわかるように、バックスラッシュの 1 つが残っています。両方を削除するために必要な正規表現を知っている人はいますか?

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 に答える