Wyrażenie regularne VSCode znaleźć i zastąpić matematyki wysyłania?

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

Używam tego wyrażenia regularnego i zastępuję polecenie w vimie, aby odjąć stałą od każdego pasującego identyfikatora.

Mogę zrobić wyrażenie regularne w VSCode, ale jak mogę odwoływać się submatchdo matematyki i zamieniać? submatch(1)nie działa w VSCode?

Dzięki.

Rakka Rage
źródło

Odpowiedzi:

347

Biorąc pod uwagę wyrażenie regularne (foobar), możesz odwoływać się do pierwszej grupy za pomocą $1itd., Jeśli masz więcej grup w polu wejściowym zastępowania.

Benjamin Pasero
źródło
zapytał ponownie różnie tutaj: stackoverflow.com/questions/35283300/…
Rakka Rage
4
Musiałem wymienić <p>(.*)</p>z <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>pliku o linii 2000. Wyobraź sobie, że robię to ręcznie.
Bishwas Mishra,
101

Aby wzmocnić odpowiedź Benjamina przykładem:

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

Wszystko w nawiasach może być wyrażeniem regularnym.

Shaun Luttin
źródło
Ten przypomniał mi, że powinienem uciec od nawiasu, jeśli wykonuję wyrażenie regularne dotyczące instrukcji if.
Mechaniczna
66

Aby dodać kolejny przykład:

Zastępowałem src attr tagami html img, ale musiałem zastąpić tylko src i zachować tekst między deklaracją img a atrybutem src.

Użyłem narzędzia znajdź + zamień (ctrl + h) jak na obrazku: Znajdź i zamień

Diogo Paschoal
źródło
8
dla mnie działa to niekonsekwentnie - chociaż widelce wyboru są prawidłowe, dane wyjściowe czasami zachowują się $1bez wymiany
godblessstrawberry
1
Cześć, @godblessstrawberry, czy możesz udostępnić ciąg wyszukiwania i ciągi zastępcze?
Diogo Paschoal
2
hi @Diogo starałem się wymienić Projectwide \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"ze myTranslate="$1"i było pomijanie klawisze losowo i wstawienie 1 $ zamiast wartości grupy czasami. aktualizacja do 1.28.0 rozwiązała ten problem
godblessstrawberry
Natknąłem się na ten sam problem co @godblessstrawberry, zastępując globalnie wszystkie moje pliki wyrażeniem regularnym „(i | lub \ + | \ -) ​​\ n (*)” i ciągiem zastępującym „\ n $ 2 $ 1” czasami poprawnie przesunął operator binarny na początek nowej linii, ale w innych przypadkach właśnie wstawił 2 $ 1 $. Wygląda na błąd w VSCodium
Tom Close
@godblessstrawberry, sprawdź to: github.com/microsoft/vscode/issues/81825 . Jeśli to nie dotyczy, podaj więcej informacji i otwórz tam problem.
Diogo Paschoal
10

W moim przypadku 1 USD nie działał, ale 0 USD działa dobrze dla mojego celu.

W tym przypadku próbowałem zastąpić ciągi właściwym formatem, aby przetłumaczyć je na Laravel, mam nadzieję, że może to być przydatne dla kogoś innego, ponieważ zajęło mi to trochę czasu, aby to uporządkować!

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

Regex Replace String for Laravel Translation

Ares9323
źródło
1
Czy to możliwe, że skopiujesz swój post i skopiujesz kod zamiast obrazu? Byłoby lepiej do wizualizacji.
Pankwood,
3

Dla początkujących zaakceptowana odpowiedź jest poprawna, ale trochę zwięźle, jeśli nie znasz się tak dobrze na VSC, ani na Regex.

Na wypadek, gdyby to był twój pierwszy kontakt z:

Aby znaleźć i zmodyfikować tekst,

  1. W kroku „Znajdź” możesz użyć wyrażenia regularnego z „przechwytywaniem grup”, np. Za I want to find (group1) and (group2)pomocą nawiasów. To byłoby znaleźć taki sam tekst jak I want to find group1 and group2, ale z tą różnicą, że można następnie odwołać group1i group2w następnym kroku:

  2. W etapie „zastępuje się”, można zwrócić się do grup poprzez przechwytywanie $1, $2etc, więc można zmienić zdanie się I found $1 and $2 having a picnic, co wyjścieI found group1 and group2 having a picnic.

Uwagi:

  • Zamiast łańcucha, wszystko wewnątrz lub na zewnątrz ()może być wyrażeniem regularnym.

  • $0 odnosi się do całego meczu

Tedskowski
źródło
2

Kolejny prosty przykład:

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

Przydatny do konwersji HTML do JSX za pomocą emocji / css!

Hedley Smith
źródło