正規表現フォーマットJson

1749 ワード

/*
 * liwenkui
 * Json    ,       class jsonName,jsonValue
 */

function formatJson(jsonString) {
    var regex = /(\s*(?:"(?:\\"|[^"])*"\s*:)?\s*(?:\{|\[)\s*)|(\s*(?:"(?:\\"|[^"])*"\s*:)?\s*(?:"(?:\\"|[^"])*"\s*,?|[\d.]+\s*,?|(?:true|false|null)\s*,?)\s*)|(\s*(?:\}|\])\s*,?\s*)/ig;
    var indentLen_=4;
    var indentStr="    ";
    var indent = "";
    var result = jsonString.replace(regex, function($_, $1, $2, $3) {
        var result;
        if ($1&&$1.length > 0) {
            result = indent + $1.replace(/\s*(?:(")((?:\\"|[^"])*)(")\s*(:))?\s*(\{|\[)\s*/i, "$1<strong class=\"jsonName\">$2</strong>$3$4$5") + "<br/>";
            indent += indentStr;
            return result;
        }
        if ($2&&$2.length > 0) {
            result = indent + $2.replace(/\s*(?:(")((?:\\"|[^"])*)(")\s*(:))?\s*(?:(")((?:\\"|[^"])*)(")|(true|false|null|\d+(?:\.\d+)?))\s*(,?)\s*/i, "$1<strong class=\"jsonName\">$2</strong>$3$4$5<strong class=\"jsonValue\">$6$8</strong>$7$9") + "<br/>";
            return result;
        }
        if ($3&&$3.length > 0) {
            var len = indent.length;
            indent = indent.substring(0, len - indentLen_*6);
            result = indent + $3.replace(/\s*(\}|\])\s*(,?)\s*/i, "$1$2") + "<br/>";
            return result;
        }
    });
    return "<pre>" + result.replace(/<(\S+)[^>]*>\s*<\/\1>/,"") + "</pre>";
}