VSCode Regex Submatch-Mathematik finden und ersetzen?

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

Ich verwende diesen Regex-Such- und Ersetzungsbefehl in vim, um eine Konstante von jeder übereinstimmenden ID zu subtrahieren.

Ich kann die Regex-Suche in VSCode durchführen, aber wie kann ich auf die submatchfür Mathematik verweisen und ersetzen? submatch(1)funktioniert nicht in VSCode?

Vielen Dank.

Rakka Rage
quelle

Antworten:

343

Wenn Sie einen regulären Ausdruck von (foobar)angeben, können Sie auf die erste Gruppe mit $1usw. verweisen, wenn das Eingabefeld Ersetzen mehr Gruppen enthält.

Benjamin Pasero
quelle
fragte hier noch einmal anders: stackoverflow.com/questions/35283300/…
Rakka Rage
4
Ich hatte zu ersetzen <p>(.*)</p>mit <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>einer 2000 Zeilendatei. Stellen Sie sich vor, ich mache es manuell.
Bishwas Mishra
99

Um Benjamins Antwort mit einem Beispiel zu ergänzen:

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

Alles in Klammern kann ein regulärer Ausdruck sein.

Shaun Luttin
quelle
Dieser erinnerte mich daran, dass ich der Klammer entkommen sollte, wenn ich einen regulären Ausdruck für die if-Anweisung mache.
Uhrwerk
65

Nur um ein weiteres Beispiel hinzuzufügen:

Ich habe src attr in img html-Tags ersetzt, aber ich musste nur src ersetzen und den Text zwischen der img-Deklaration und dem src-Attribut beibehalten.

Ich habe das Tool zum Suchen und Ersetzen (Strg + H) wie im Bild verwendet: Suchen und Ersetzen

Diogo Paschoal
quelle
8
Für mich funktioniert dies uneinheitlich - obwohl die Auswahlgabeln korrekt sind, bleibt die Ausgabe manchmal $1ersatzlos
godblessstrawberry
1
Hallo, @godblessstrawberry, kannst du deine Such- und Ersatzzeichenfolgen teilen?
Diogo Paschoal
2
hi @Diogo Ich habe versucht, projektweit \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"durch zu ersetzen, myTranslate="$1"und es wurden zufällig Schlüssel übersprungen und manchmal $ 1 anstelle des Gruppenwerts eingefügt . Update auf 1.28.0 behoben dieses Problem
godblessstrawberry
Ich hatte das gleiche Problem wie @godblessstrawberry und ersetzte alle meine Dateien global mit dem regulären Ausdruck '(und | oder \ + | \ -) ​​\ n (*)' und der Ersatzzeichenfolge '\ n $ 2 $ 1', manchmal korrekt Der binäre Operator wurde an den Anfang der neuen Zeile verschoben, in anderen Fällen jedoch nur $ 2 $ 1 eingefügt. Scheint ein Fehler in VSCodium zu sein
Tom Close
@godblessstrawberry, überprüfen Sie dies: github.com/microsoft/vscode/issues/81825 . Wenn dies für Sie nicht zutrifft, geben Sie weitere Informationen an und öffnen Sie dort ein Problem.
Diogo Paschoal
9

In meinem Fall hat $ 1 nicht funktioniert, aber $ 0 funktioniert gut für meinen Zweck.

In diesem Fall habe ich versucht, Zeichenfolgen durch das richtige Format zu ersetzen, um sie in Laravel zu übersetzen. Ich hoffe, dass dies für andere nützlich sein kann, da ich eine Weile gebraucht habe, um es zu klären!

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

Regex-Zeichenfolge für Laravel-Übersetzung ersetzen

Ares9323
quelle
1
Ist das möglich, wenn Sie Ihren Beitrag kopieren und den Code anstelle des Bildes kopieren? Es wäre besser für die Visualisierung.
Pankwood
3

Für Anfänger ist die akzeptierte Antwort richtig, aber ein wenig knapp, wenn Sie weder mit VSC noch mit Regex so vertraut sind.

Für den Fall, dass dies Ihr erster Kontakt ist mit:

Um Text zu finden und zu ändern ,

  1. Im Schritt "Suchen" können Sie Regex mit "Erfassen von Gruppen" verwenden, z I want to find (group1) and (group2). B. in Klammern. Dies würde den gleichen Text finden wie I want to find group1 and group2, aber mit dem Unterschied, auf den Sie dann verweisen können group1und group2im nächsten Schritt:

  2. In dem „Ersetzen“ Schritt können Sie die Erfassungsgruppen über beziehen $1, $2etc, so dass Sie den Satz ändern könnten I found $1 and $2 having a picnic, was würde AusgangI found group1 and group2 having a picnic.

Anmerkungen:

  • Anstelle nur einer Zeichenfolge kann alles innerhalb oder außerhalb der Zeichenfolge ()ein regulärer Ausdruck sein.

  • $0 bezieht sich auf das ganze Spiel

Tedskovsky
quelle
2

Ein weiteres einfaches Beispiel:

Search: style="(.+?)"
Replace: css={css`$1`}

Nützlich für die Konvertierung von HTML in JSX mit Emotion / CSS!

Hedley Smith
quelle