validate - regular expression javascript w3schools
Eliminar todos los colores/estilos ANSI de las cadenas (2)
El carácter de escape es /u001b
, y la secuencia desde [
hasta que se encuentra la primera m
es el estilo. Solo necesitas quitar eso. Entonces, reemplaza globalmente usando el siguiente patrón:
//u001b/[.*?m/g
Así,
''/u001b[1m/u001b[38;5;231mHello World/u001b[0m/u001b[22m''.replace(//u001b/[.*?m/g, '''')
Uso una biblioteca que agrega colores / estilos ANSI a las cadenas. Por ejemplo:
> "Hello World".rgb(255, 255, 255)
''/u001b[38;5;231mHello World/u001b[0m''
> "Hello World".rgb(255, 255, 255).bold()
''/u001b[1m/u001b[38;5;231mHello World/u001b[0m/u001b[22m''
Cuando lo hago:
console.log(''/u001b[1m/u001b[38;5;231mHello World/u001b[0m/u001b[22m'')
Se emitirá un mensaje en blanco y en negrita "Hello World"
.
Tener una cadena como ''/u001b[1m/u001b[38;5;231mHello World/u001b[0m/u001b[22m''
¿cómo se pueden eliminar estos elementos?
foo(''/u001b[1m/u001b[38;5;231mHello World/u001b[0m/u001b[22m'') //=> "Hello World"
Tal vez una buena expresión regular? ¿O hay alguna característica incorporada?
El trabajo que estaba pensando era crear un proceso hijo:
require("child_process")
.exec("node -pe /"console.error(''/u001b[1m/u001b[38;5;231mHello World/u001b[0m/u001b[22m'')/""
, function (err, stderr, stdout) { console.log(stdout);
});
Pero la salida es la misma ...
La expresión regular que debe usar es
/[/u001b/u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g
Esto coincide con la mayoría de los códigos de escape ANSI , más allá de solo colores, incluidos los códigos VT100 extendidos, códigos de impresoras arcaicos / propietarios, etc.
Tenga en cuenta que la /u001b
en la expresión regular anterior puede no funcionar para su biblioteca en particular (aunque debería); Echa un vistazo a mi respuesta a una pregunta similar con respecto a los caracteres de escape aceptables si no es así.
Si no te gustan las expresiones regulares, siempre puedes usar el paquete strip-ansi
.
Por ejemplo, la cadena jumpUpAndRed
continuación contiene códigos ANSI para saltar a la línea anterior, escribir un texto en rojo y luego regresar al principio de la siguiente línea, de los cuales se requieren sufijos distintos de 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);