从字符串中删除所有ANSI颜色/样式

我使用一个向字符串添加ANSI颜色/样式的库。例如:

> "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'

当我做:

console.log('\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m')

一个"Hello World"白色和大胆消息将被输出。

像这样'\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m'如何删除这些元素的字符串?

foo('\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m') //=> "Hello World"

也许是一个很好的正则表达式?还是有任何内置功能?


我当时想的工作是创建子进程:

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

});

但是输出是一样的…

回答:

应该 使用的正则表达式是

/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g

这不仅匹配颜色,还匹配大多数ANSI转义代码,包括扩展的VT100代码,古旧/专有打印机代码等。

请注意,\u001b上述正则表达式中的不适用于您的特定库(即使应该);如果不是,对可接受转义字符的类似问题的回答。

如果您不喜欢正则表达式,则可以随时使用该strip-ansi软件包。


例如,jumpUpAndRed下面的字符串包含ANSI代码,用于跳转到上一行,写一些红色文本,然后返回到下一行的开头-其中要求后缀不是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);

以上是 从字符串中删除所有ANSI颜色/样式 的全部内容, 来源链接: utcz.com/qa/405457.html

回到顶部