Ho difficoltà a trovare il problema con la funzione seguente. I primi parametri sono una stringa contenente i codici colore ANSI e il secondo parametro è un valore booleano.Come rimuovere/sostituire i codici colore ANSI da una stringa in Javascript
Se il valore booleano è impostato su false
, viene eseguita una rimozione completa sulla stringa.
Se il valore booleano è impostato su true
, un ciclo converte tutti i codici colore in qualcosa che è più semplice da analizzare in seguito.
Sospetto che lo RegExp
sia il problema poiché è confuso tra 1; 33 e 0; 31 per qualche 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));
L'uscita effettiva è:
dove dovrebbe essere abcd{Gefgh{Yijkl
Qualcuno sa che cosa c'è che non va in questo momento?
Il secondo parametro di replaceColor è un valore booleano e sostituirà tutti i codici di colore con una stringa di facile lettura (IMO) e di facile analisi o se viene utilizzato falso, rimuoverà tutti i codici di colori trovati . – Cybrix