Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Заменить escape-последовательность на сами символы (https://javascript.ru/forum/misc/33556-zamenit-escape-posledovatelnost-na-sami-simvoly.html)

Lexi 27.11.2012 18:41

Заменить escape-последовательность на сами символы
 
Ну т.е. "\n" на "\\n" и т.п. Вопрос в основном в том, можно ли это сделать проще/короче, не переписывая их список как на http://stackoverflow.com/questions/3...cape-sequences

Пока я изобразил что-то такое:
var ret = '', i = 0, obj = {'\b': '\\b', };
while(chr = str.charAt(i++)){
    ret += obj[chr] || chr;
}

Atae 28.11.2012 05:37

Цитата:

Сообщение от Lexi
Заменить escape-последовательность на сами символы

што?

это штоле?
alert( '\b' )

alert( JSON.stringify('\b') )

Lexi 15.12.2012 15:35

Скорее toSource/uneval, т.к потребовались и функции.
В итоге, по мотивам stringify изобразил нечто подобное:
var toSrc = function (obj) {
    var strToSrc = function (str) {
        var chr, ret = '', i = 0, meta = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'};
        while(chr = str.charAt(i++)){
            ret += meta[chr] || chr;
        };
        return '"' + ret + '"';
    };
    var arrToSrc = function (arr) {
        var ret = [];
        for (var i = 0; i < arr.length; i++) {
            ret[i] = toSrc(arr[i]) || 'null';
        };
        return '[' + ret.join(',') + ']';
    };
    var objToSrc = function (obj) {
        var val, ret = [];
        for (var prop in obj) {
            if (obj.hasOwnProperty(prop)) {
                if (val = toSrc(obj[prop])) ret.push(strToSrc(prop) + ': ' + val);
            }
        };
        return '{' + ret.join(',') + '}';
    };
    switch (Object.prototype.toString.call(obj).slice(8, -1)) {
        case 'Array': return arrToSrc(obj);
        case 'Boolean':
        case 'Function':
        case 'RegExp': return obj.toString();
        case 'Date': return 'new Date(' + obj.getTime() + ')';
        case 'Math': return 'Math';
        case 'Number': return isFinite(obj) ? String(obj) : 'null';
        case 'Object': return objToSrc(obj);
        case 'String': return strToSrc(obj);
        default: return obj ? '{}' : 'null';
    }
};


Часовой пояс GMT +3, время: 06:47.