从字符串中删除所有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