VSCode正規表現はサブマッチ数学を見つけて置き換えますか?


204
%s@{fileID: \(213[0-9]*\)@\='{fileID: '.(submatch(1)-1900)@

この正規表現の検索と置換コマンドをvimで使用して、一致する各IDから定数を減算しています。

VSCodeで正規表現検索を行うことはできますが、submatch数学の参照を参照して置換する方法 submatch(1)VSCodeで動作しませんか?

ありがとう。

回答:


344

正規表現を指定(foobar)する$1と、置換入力フィールドにさらにグループがある場合は、を使用して最初のグループを参照できます。


diffrentlyここで再び尋ねた:stackoverflow.com/questions/35283300/...
ラッカレイジの

4
2000行のファイルを置き換える必要<p>(.*)</p>があり<p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>ました。手動で行うことを想像してみてください。
Bishwas Mishra

100

例でベンジャミンの答えを増やすには:

Find        Carrots(With)Dip(Are)Yummy
Replace     Bananas$1Mustard$2Gross
Result      BananasWithMustardAreGross

括弧内はすべて正規表現にすることができます。


これは、ifステートメントで正規表現を実行している場合は、括弧をエスケープする必要があることを思い出させました。
時計じかけ

65

別の例を追加するだけです:

img htmlタグのsrc attrを置き換えていましたが、srcのみを置き換え、img宣言とsrc属性の間にテキストを保持する必要がありました。

画像のように、検索+置換ツール(Ctrl + H)を使用しました。 検索して置き換える


8
私にとってこれは一貫性のない動作です-選択フォークは正しいですが、出力は時々$1置換なしで保持されます
godblessstrawberry

1
こんにちは、@ godblessstrawberry、検索文字列と置換文字列を共有できますか?
Diogo Paschoal

2
こんにちは@Diogoプロジェクト全体を置き換えようとしたところ\[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"myTranslate="$1"キーがランダムにスキップされ、グループ値の代わりに$ 1が挿入されることがありました。1.28.0へのアップデートはこの問題を解決しました
godblessstrawberry 2018年

@godblessstrawberryと同じ問題に遭遇し、すべてのファイルを正規表現 '(and | or \ + | \-)\ n(*)'と置換文字列 '\ n $ 2 $ 1'を使用してグローバルに置換することを正しく行った二項演算子を改行の先頭にシフトしましたが、他のケースでは$ 2 $ 1を挿入しただけです。VSCodiumのバグのように見える
トムクローズ

:@godblessstrawberry、このチェックgithub.com/microsoft/vscode/issues/81825を。当てはまらない場合は、詳細情報を入力し、そこで問題をオープンしてください。
Diogo Paschoal

9

私の場合、$ 1は機能しませんでしたが、$ 0は私の目的には問題なく機能します。

この場合、文字列を正しい形式に置き換えてLaravelで翻訳しようとしていましたが、整理に時間がかかったので、これが他の誰かに役立つことを願っています!

Search: (?<=<div>).*?(?=</div>)
Replace: {{ __('$0') }}

Laravel翻訳用の正規表現置換文字列


1
あなたの投稿を編集して、画像ではなくコードをコピーすることは可能ですか?それは視覚化に適しています。
パンクウッド

3

初心者の場合、受け入れられた答えは正しいですが、VSCやRegexのいずれかをよく知らない場合は少し簡潔です。

したがって、これが次のいずれかとの最初の連絡である場合:

テキストを検索して変更するには

  1. 「検索」ステップでは、I want to find (group1) and (group2)括弧を使用するなど、「キャプチャグループ」で正規表現を使用できます。これは、同じテキストを見つけるだろうI want to find group1 and group2が、その差にあなたがして参照できることgroup1group2、次のステップで:

  2. 「置き換え」のステップでは、経由でキャプチャグループを参照することができ$1$2あなたが文を変更することができるように、などI found $1 and $2 having a picnicその出力はだろう、I found group1 and group2 having a picnic.

ノート:

  • 単なる文字列の代わりに、の内側または外側の何でも()正規表現にすることができます。

  • $0 マッチ全体を指します


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.