从string中删除所有ANSI颜色/样式
我使用一个将ANSI颜色/样式添加到string的库。 例如:
> "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"
白色和粗体的信息。
有一个string像'\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"
也许一个好的正则expression式? 还是有内置function?
我在想的工作是创buildsubprocess:
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); });
但是输出是一样的
你应该使用的正则expression式是
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g
这与绝大多数ANSI转义码匹配,不仅仅是颜色,还包括扩展的VT100代码,陈旧/专有的打印机代码等。
请注意,上面的正则expression式中的\u001b
可能不适用于您的特定库(即使它应该)。 如果没有,可以查看我有关可接受的转义字符的类似问题的答案 。
如果你不喜欢正则expression式,你总是可以使用strip-ansi
包。
例如,下面的stringjumpUpAndRed
包含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);
转义字符是\u001b
,从[
到第一个m
遇到的顺序是造型。 你只需要删除它。 因此,使用以下模式全局replace:
/\u001b\[.*?m/g
从而,
'\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m'.replace(/\u001b\[.*?m/g, '')