use a library将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);
 });

但是输出是一样的...

最佳答案

regex you should be using

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

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

请注意,上述正则表达式中的\u001b可能不适用于您的特定库(即使应该);如果没有,请查看my answer有关可接受转义字符的类似问题。

如果您不喜欢正则表达式,则可以始终使用 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);

10-08 15:58