w3schools validate test regular example javascript regex node.js ansi-escape

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);