Tengo problemas para encontrar el problema con la función siguiente. Los primeros parámetros son una cadena que contiene códigos de color ANSI y el segundo parámetro es booleano.Cómo eliminar/reemplazar códigos de color ANSI de una cadena en Javascript
Si el valor booleano está establecido en false
, se realiza una eliminación completa en la cadena.
Si el valor booleano está establecido en true
, un bucle convierte todos los códigos de color en algo más fácil de analizar posteriormente.
Sospecho que el problema es RegExp
, ya que se confunde entre 1; 33 y 0; 31 por algún motivo.
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));
La salida real es:
donde debe estar abcd{Gefgh{Yijkl
Alguien sabe qué le pasa ahora?
El segundo parámetro de replaceColor es un booleano y reemplazará todos los códigos de color con una cadena fácil de leer (IMO) y fácil de analizar, o si se usa falso, eliminará todos los códigos de color encontrados. . – Cybrix