javascript - 如何从 Javascript 中的字符串中删除/替换 ANSI 颜色代码

标签 javascript regex string ansi

我找不到下面函数的问题。第一个参数是包含 ANSI 的字符串 颜色代码,第二个参数是 bool 值。

如果 bool 值设置为 false,则会对字符串进行完全删除。

如果 bool 值设置为 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

有人知道现在出了什么问题吗?

最佳答案

您可以在字符串和正则表达式中使用八进制代码

x = "\033[1mHello Bold World!\033[0m\n";
x = x.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"");
print(x);

这最匹配 ANSI escape codes ,包括扩展 VT100 代码、陈旧/专有打印机代码等。

关于javascript - 如何从 Javascript 中的字符串中删除/替换 ANSI 颜色代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149601/

相关文章:

javascript - 如何替换不是html标签的特定子字符串

javascript - 将 ’ 替换为 javascript(不是 ' )

javascript - 开始使用 JavaScript 中的动画排版/粒子(将粒子映射到单词)?

javascript - 如何仅使用javascript从innerHTML中选择元素

c# - 将多个连续的相等字符从一个字符串减少为一个

r - R中的子集字符向量

javascript - 在字符串中最后一次出现特定字符之前插入

python - 从字符串Python中删除多个子字符串

javascript - 不管是常数还是常数值都会发生变化;此外,对一行二维数组的更改会传播到其他行

javascript - 将值从 JSP 传递到 Javascript