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

Javascript 从字符串中删除所有ANSI颜色/样式,javascript,regex,node.js,ansi-escape,Javascript,Regex,Node.js,Ansi Escape,I将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;231mH

I将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
,从
[
到遇到第一个
m
的序列是样式。您只需要删除它。因此,使用以下模式全局替换:

/\u001b\[.*?m/g
因此,

问题是


颜色类似于ESC[39m格式,最短的regexp是/\u001b[^m]*?m/g

其中\u001bESC字符, [^m]*?是在m之前的任何字符(非贪婪模式), m本身和用于全局(all)替换的/g

例如:

    var line="\x1B[90m2021-02-03 09:35:50.323\x1B[39m\t\x1B[97mFinding: \x1B[39m\x1B[97m»\x1B[39m\x1B[33m42125121242\x1B[39m\x1B[97m«\x1B[39m\x1B[0m\x1B[0m\t\x1B[92mOK\x1B[39m";
    
    console.log(line.replace(/\u001b[^m]*?m/g,""));
// ->  2021-02-03 09:35:50.323 Finding: »42125121242«  OK ( without colors )
    console.log(line);
// -> 2021-02-03 09:35:50.323 Finding: »42125121242«  OK ( colored )

您应该使用。它检查颜色是否启用,并将自动从文本中删除ANSI代码。@Qix它不是关于样式,而是关于取消样式--从字符串中删除ANSI样式。对于着色,我使用,对于取消样式,我使用。希望现在更清晰。
我使用一个向字符串添加ANSI颜色/样式的库
和我是说,通过使用粉笔,如果您选择,您可以自动删除这些代码(即,您可以设置样式并自动删除)@Qix啊,我知道了。我以为
粉笔
只是用来着色的。据我所见,粉笔是用来着色的,你是其中的一员。:-)很好!@Qix你可以更新你的答案,包括
strip ansi
软件包。我一直喜欢小巧可爱的npm软件包。:)完全公开:我是一个上面提到的粉笔项目的维护者博韦
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g
    var line="\x1B[90m2021-02-03 09:35:50.323\x1B[39m\t\x1B[97mFinding: \x1B[39m\x1B[97m»\x1B[39m\x1B[33m42125121242\x1B[39m\x1B[97m«\x1B[39m\x1B[0m\x1B[0m\t\x1B[92mOK\x1B[39m";
    
    console.log(line.replace(/\u001b[^m]*?m/g,""));
// ->  2021-02-03 09:35:50.323 Finding: »42125121242«  OK ( without colors )
    console.log(line);
// -> 2021-02-03 09:35:50.323 Finding: »42125121242«  OK ( colored )