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.

Antworten:



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.


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


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


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


2

Ein weiteres einfaches Beispiel:

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.