我发现下面的函数有问题。第一个参数是一个包含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 ) );
实际输出为:
应该是abcd{Gefgh{Yijkl
的位置
有人知道出什么事了吗?
2条答案
按热度按时间fzsnzjdm1#
可以在字符串和RegExps中使用八进制代码
这与大多数ANSI escape codes匹配,包括扩展的VT 100代码、过时/专有打印机代码等。
zzlelutf2#
你的正则表达式是错误的。它应该是
"\\033\\[" + k + "m"
,而不是"\033\[[" + k + "]*m"
。