Jaki smak Regex jest używany w programie Visual Studio Code?


137

Próbując zastąpić wyszukiwanie w programie Visual Studio Code, stwierdzam, że jego smak Regex różni się od pełnego programu Visual Studio. W szczególności próbuję zadeklarować nazwaną grupę, z string (?<p>[\w]+)którą działa w programie Visual Studio, ale nie w Visual Studio Code. Będzie narzekać z błędem Invalid group.

Oprócz rozwiązania tego konkretnego problemu szukam informacji na temat smaku Regexes w Visual Studio Code i gdzie znaleźć dokumentację na ten temat, aby móc odpowiedzieć sobie na inne pytania, na które mogę się natknąć.

W pełnym programie Visual Studio używane są wyrażenia regularne platformy .NET, jak opisano tutaj . Ten link jest wymieniony jako dokumentacja dla VS Code w innym miejscu w Stackoverflow, ale tak nie jest.


VSCode korzysta z silnika regex opartego na JavaScript, ale to nie to samo. Nie możesz tam używać nazwanych grup przechwytywania.
Wiktor Stribiżew

1
Nie ma określonej dokumentacji dotyczącej wyrażenia regularnego używanego w VSCode. Jeśli jednak spojrzysz na kod źródłowy , zobaczysz dużo kodu JS. Jeśli spróbujesz użyć lookbehinds, otrzymasz błąd nieprawidłowego wzoru, podczas gdy lookahead działa. A styl JS regex jest jedynym silnikiem regex, który traktuje [^]wzorzec jako pasujący do dowolnego symbolu. Jest więc jasne, że jest to silnik JS regex.
Wiktor Stribiżew

5
Standardem jest ECMAScript 5 .
Wiktor Stribiżew

1
OK. Cóż, jeśli jesteś pewien i masz linki do dokumentów, na które możesz odpowiedzieć. Głosuję za. Nie myśl jednak, że specyfikacja ECMAScript jest świetnym łączem, jeśli jest jedyna.
Eric

1
Więc jakiej odpowiedzi oczekujesz? Wszystko, co zamieściłem powyżej + link do opisu składni wyrażenia regularnego JS? Jak odniesienie do MDN ?
Wiktor Stribiżew

Odpowiedzi:


177

Rust Regex na pasku bocznym Znajdź / zamień w plikach

Rob Lourens z MSFT napisał, że wyszukiwanie plików używa wyrażenia regularnego Rust. Dokumentacja języka Rust opisuje składnię.

Rob Lourens na GitHub

JavaScript Regex w widżecie Znajdź / zamień w pliku

Alexandru Dima z MSFT napisał, że widget wyszukiwania używa wyrażenia regularnego JavaScript. Jak skomentował Wicktor, dokumentacja ECMAScript 5 opisuje składnię. Podobnie jest z Przewodnikiem po wyrażeniach regularnych JavaScript w MDN .

Alexandru Dima na GitHubie

Sprawdź różnicę

Pasek boczny znajdowania w plikach nie obsługuje, (?=foobar)podczas gdy widżet znajdowania w pliku obsługuje tę składnię wyszukiwania w przód.

Pokazuje lookahead działający w widgecie, ale nie na pasku bocznym.

Odnośnie Znajdź / Zamień grupami

Aby znaleźć / zastąpić grupami, użyj nawiasów ()do grupowania i $1, $2, $3, $naby zastąpić.

Oto przykład.

Przed:

To jest tekst przed zamianą.

Po:

To jest tekst po zamianie.


13

Odpowiedź Shauna jest nadal poprawna, jednak aby dodać aktualizację, ostatnio VS Code dodał opcję wyrażenia zgody na używanie silnika PCRE2 opartego na Perlu . Możesz to włączyć za pomocą konfiguracji ustawień.

Pozwala to na wykonywanie bardziej zaawansowanych operacji regex, takich jak lookaheads i backreferences . Ale jak zauważono poniżej, wyrażenie regularne nadal musi być poprawnym wyrażeniem regularnym JavaScript .

VS Code obsługuje wyszukiwanie wyrażeń regularnych, jednak odwołania wsteczne i przeszukiwanie nie są obsługiwane domyślnie. Ale możesz je włączyć za pomocą ustawienia search.usePCRE2 . To konfiguruje ripgrep do używania silnika regex PCRE2. Chociaż PCRE2 obsługuje wiele innych funkcji, obsługujemy tylko wyrażenia regex, które są nadal prawidłowe w JavaScript , ponieważ otwarte edytory są nadal przeszukiwane za pomocą wyszukiwania opartego na JavaScript edytora.

A na bonus, jeśli wylądowałeś tutaj, próbując wyszukiwać w wielu wierszach, VS Code niedawno dodał tę funkcję !

wprowadź opis obrazu tutaj


PCRE2 można aktywować w menu ustawień. Przejdź do Preferencje ~ Ustawienia i wyszukaj „regex”
DougR

Wygląda na to, że to ustawienie jest przestarzałe , a PCRE2 jest automatycznie używany jako rezerwowy, gdy domyślny silnik nie obsługuje funkcji.
Kevin Rak
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.