Supprimer toutes les couleurs/styles ANSI des cordes
I utiliser une bibliothèque qui ajoute des couleurs / styles ANSI aux cordes. Par exemple:
> "Hello World".rgb(255, 255, 255)
'u001b[38;5;231mHello Worldu001b[0m'
> "Hello World".rgb(255, 255, 255).bold()
'u001b[1mu001b[38;5;231mHello Worldu001b[0mu001b[22m'
Quand je fais:
console.log('u001b[1mu001b[38;5;231mHello Worldu001b[0mu001b[22m')
"Hello World"
les messages blancs et gras seront affichés.
ayant une chaîne comme 'u001b[1mu001b[38;5;231mHello Worldu001b[0mu001b[22m'
comment ces éléments-elle être retirée?
foo('u001b[1mu001b[38;5;231mHello Worldu001b[0mu001b[22m') //=> "Hello World"
peut-être une bonne expression régulière? Ou est-il intégré?
le travail autour de je pensais était de créer enfant processus:
require("child_process")
.exec("node -pe "console.error('u001b[1mu001b[38;5;231mHello Worldu001b[0mu001b[22m')""
, function (err, stderr, stdout) { console.log(stdout);
});
mais la sortie est la même...
2 réponses
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g
cela correspond à la plupart des échappement ANSI codes, au-delà des couleurs, y compris la prolongation de VT100 codes, archaïque/propriétaire de l'imprimante de codes, etc.
notez que le \u001b
dans le ci-dessus regex peut ne pas fonctionner pour votre bibliothèque (même si elle devrait); découvrez ma réponse à une question similaire concernant les caractères d'échappement acceptables si elle ne fait pas.
Si vous n'aimez pas les regexes, vous pouvez toujours utiliser le strip-ansi
package.
Par exemple, la chaîne jumpUpAndRed
ci - dessous contient les codes ANSI pour sauter à la ligne précédente, écrire du texte rouge, puis revenir au début de la ligne suivante-de ce qui nécessitent des suffixes autres que m
.
var jumpUpAndRed = "\x1b[F\x1b[31;1mHello, there!\x1b[m\x1b[E";
var justText = jumpUpAndRed.replace(
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');
console.log(justText);
Le caractère d'échappement est \u001b
, et la séquence [
jusqu'à la première m
est rencontré est le style. Vous avez juste besoin de l'enlever. Ainsi, remplacer globalement en utilisant le modèle suivant:
/\u001b\[.*?m/g
ainsi,
'\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m'.replace(/\u001b\[.*?m/g, '')