Как удалить / заменить цветовые коды ANSI из строки в Javascript - PullRequest
6 голосов
/ 22 августа 2011

У меня проблема с поиском проблемы с помощью функции ниже.Первыми параметрами является строка, содержащая цветовые коды ANSI, а вторым параметром является логическое значение.

Если логическое значение установлено на false, для строки выполняется полное удаление.

Еслилогическое значение установлено на true, цикл конвертирует все цветовые коды во что-то более простое для меня, чтобы потом разобрать.

Я подозреваю, что RegExp является проблемой, поскольку она путается между 1; 33 и 0;По какой-то причине 31.

var colorReplace = function( input, replace ) {
        var replaceColors = {
            "0;31" : "{r",
            "1;31" : "{R",

            "0;32" : "{g",
            "1;32" : "{G",

            "0;33" : "{y",
            "1;33" : "{Y",

            "0;34" : "{b",
            "1;34" : "{B",

            "0;35" : "{m",
            "1;35" : "{M",

            "0;36" : "{c",
            "1;36" : "{C",

            "0;37" : "{w",
            "1;37" : "{W",

            "1;30" : "{*",

            "0" : "{x"
        };

        if ( replace )
        {
            for( k in replaceColors )
            {
                //console.log( "\033\[" + k + "m" + replaceColors[ k ] );
                var re = new RegExp( "\033\[[" + k + "]*m", "g" );

                input = input.replace( re, replaceColors[ k ] );
            }
        } else {
            input = input.replace( /\033\[[0-9;]*m/g, "" );
        }

        return input;
    };

console.log( "abcd\033[1;32mefgh\033[1;33mijkl\033[0m" );
console.log( colorReplace( "abcd\033[1;32mefgh\033[1;33mijkl", true ) );

Фактический результат:

enter image description here

Где это должно быть abcd{Gefgh{Yijkl

Кто-нибудь знает, чтосейчас не так?

Ответы [ 2 ]

7 голосов
/ 22 августа 2011

Вы можете использовать восьмеричные коды в строках и регулярных выражениях

x = "\033[1mHello Bold World!\033[0m\n";
x = x.replace(/\033\[[0-9;]*m/,"");
print(x);
1 голос
/ 26 августа 2011

Ваш Regex был не прав.Это должно быть "\\033\\[" + k + "m", а не "\033\[[" + k + "]*m".

...