私はVisual Studioコード拡張に取り組んでいます。拡張子は、エディタウィンドウで現在選択されているテキストに作用し、外部コマンド(私の場合はlein-cljfmt
ですが、私の質問とは無関係です)に送信されます。外部コマンドがテキストの処理を終えたら、現在のエディタセレクタをコマンドラインツールから返された結果に置き換えます。以下のようにエスケープされていないことに改行リテラルを含む複数行の文字列を正しくエスケープしたりエスケープしたりするにはどうすればよいですか?
contents
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\n/g, '\\n');
結果:私はこのようにそれをエスケープ文字列を送信する前に
contents
.replace(/\\n/g, '\n')
.replace(/\\"/g, '"')
.replace(/\\\\/g, '\\');
これは、すべてが、1つの場合に動作します:選択が処理されていることとき改行リテラルを含む文字列リテラルが含まれていると、エスケープ処理ではこれが改行され、エディタでコードが破損します。
これは私のエスケープを破るスニペットの例です。
(defn join
[a b]
(str a "\n" b))
は、私は今で
.replace(/(?!\B"[^"]*)\\n(?![^"]*"\B)/g, '\n')
のような、非常にいくつかの正規表現の黒魔術を試してみましたが、ありません解決策を見つけることができませんでしたエッジケースはありません。私が行方不明になっているこれを行う方法はありますか?私はまた、それが私にとって一般的なシナリオであると思われるので、それを扱うことができるVSCode拡張APIがあるのだろうかと思います。
答えをいただきありがとうございます。私はこれを少しでも開いておきたいと思いますが、VSCode APIを使用してこれを行うことができるかどうかを知る人もいます。 – m90