javascript - 追加 - jquery class 変更




文字列からすべてのANSI色/スタイルを削除する (2)

正規表現を使用する必要があります

/[\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);

文字列に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

このように、

'\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m'.replace(/\u001b\[.*?m/g, '')




ansi-escape