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\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g
_
これは、拡張VT100コード、古風な/独自のプリンタコードなど、色だけでなく、ほとんどの ANSIエスケープコード に一致します。
上記の正規表現の_\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);
_
エスケープ文字は\u001b
であり、[
から最初のm
に遭遇するまでのシーケンスがスタイリングです。あなたはそれを取り除く必要があります。したがって、次のパターンを使用してグローバルに置き換えます。
/\u001b\[.*?m/g
したがって、
'\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m'.replace(/\u001b\[.*?m/g, '')