Mam problem ze znalezieniem problemu z poniższą funkcją. Pierwszymi parametrami jest ciąg znaków zawierający kody kolorów ANSI , a drugi parametr to boolean.Jak usunąć/zastąpić kody kolorów ANSI z ciągu znaków w JavaScript
Jeśli wartość boolowska jest ustawiona na false
, następuje całkowite usunięcie ciągu.
Jeśli wartość boolowska jest ustawiona na true
, pętla przekształca wszystkie kody kolorów w coś łatwiejszego do przeanalizowania później.
Podejrzewam, że problemem jest RegExp
, ponieważ z jakiegoś powodu jest on pomieszany między 1, 33 a 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));
Rzeczywista moc wynosi:
gdzie powinien być abcd{Gefgh{Yijkl
ktoś wie co się dzieje teraz?
Drugi parametr metody replaceColor jest wartością boolowską i zastąpi wszystkie kody kolorów łatwym do odczytania (IMO) i łatwym do przeanalizowania ciągiem znaków lub jeśli użyta zostanie wartość false, usunie wszystkie znalezione kody kolorów . – Cybrix