Javascript 从字符串中删除所有ANSI颜色/样式
I将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
> "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 其中\u001b是ESC字符, [^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 )