2011-08-22 13 views
6

bir dize gelen ANSI renk kodlarını değiştirmek için. İlk parametre ANSI renk kodları içeren bir dizge olup, ikinci parametre, bir boolean. nasıl sorun aşağıda fonksiyonu ile sorunun çözümünde var/kaldırmak JavaScript

boolean false ayarlanırsa

, tam kaldır ipe yapılır. boolean true ayarlanırsa

, bir döngü beni daha sonra ayrıştırmak için daha kolay bir hale her renk kodlarını dönüştürün.

Ben 1 arasında karışık olarak RegExp sorun olmaktan şüpheli; 33 ve 0; nedense 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)); 

gerçek çıktı şöyledir:

enter image description here

Nerede abcd{Gefgh{Yijkl

Artık herkes neyin yanlış olduğunu biliyor olmalı?

+0

replaceColor'un ikinci parametresi bir booledir ve ya okunması kolay (IMO) ve ayrıştırılması kolay bir dizeyle tüm renk kodlarını değiştirir ya da false kullanılıyorsa, bulunan tüm colorcode'ları kaldıracaktır. . – Cybrix

cevap

1

düzenli ifadeleri. "\033\[[" + k + "]*m" değil "\\033\\[" + k + "m" olmalıdır.

+0

Gerçekten de! Teşekkürler! – Cybrix

7

Her iki dizelerinde sekizlik kodlarını kullanabilirsiniz ve Kişisel Regex yanlıştı

x = "\033[1mHello Bold World!\033[0m\n"; 
x = x.replace(/\033\[[0-9;]*m/,""); 
print(x); 
+0

Bu işe yarıyor! Bir RegExp nesnesini kullanarak çözüm ne olurdu? Ya (çözümünüzü) ya da hatırlamak ve ayrıştırmak için eşdeğer/daha kolay bir dizgeyle değiştirmeyi düşünüyorum. – Cybrix

+1

@Cybrix: '/ \ 033 \ [[0-9] * m/'' Normİfd eşittir ("\ 033 \ [[0-9] x m")'. –

+0

@ varolvaro, Teşekkürler. Daha sonra, RegExp parametresinde bir değişken kullanmak istersem, bu işe yarar: 'var byellow =" 1; 33 "; var re = new RegExp ("\ 033 \ [" + byellow + "* m", "g"); string = string.replace (yeniden, "{Y}"); '? – Cybrix

İlgili konular