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.

Odpowiedzi:



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.


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ń


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


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


2

Kolejny prosty przykład:

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.