我無法找到下面的函數的問題。第一個參數是包含ANSI 顏色代碼的字符串,第二個參數是布爾值。如何從Javascript中的字符串中刪除/替換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
任何人都知道現在是怎麼回事?
replaceColor的第二個參數是一個布爾值,它將用易於閱讀的(IMO)和容易解析的字符串替換所有的顏色代碼,或者如果使用false,它將刪除所有找到的顏色代碼。 – Cybrix