Che tipo di Regex utilizza Visual Studio Code?


130

Cercando di sostituire la ricerca nel codice di Visual Studio, trovo che il suo sapore Regex sia diverso da Visual Studio completo. In particolare, provo a dichiarare un gruppo denominato con string (?<p>[\w]+)cui funziona in Visual Studio ma non in Visual Studio Code. Si lamenterà dell'errore Invalid group.

Oltre a risolvere questo specifico problema, sto cercando informazioni sul sapore di Regexes nel codice di Visual Studio e dove trovare la documentazione al riguardo, in modo da poter aiutare me stesso con qualsiasi altra domanda su cui potrei inciampare.

Full Visual Studio utilizza le espressioni regolari .NET come documentato qui . Questo link è menzionato come documentazione per VS Code altrove su Stackoverflow, ma non lo è.


VSCode utilizza un motore regex basato su JavaScript, ma non è lo stesso. Non è possibile utilizzare gruppi di acquisizione con nome lì.
Wiktor Stribiżew,

1
Non esiste una documentazione specifica sul regex utilizzato in VSCode. Tuttavia, se dai un'occhiata al codice sorgente , vedrai un sacco di codice JS in giro. Se si tenta di utilizzare lookbehinds, si ottiene un errore di modello non valido, mentre lookaheads funziona. E il sapore regex di JS è l'unico motore regex che considera lo [^]schema come corrispondente a qualsiasi simbolo. Quindi, è chiaro che è il motore regex JS.
Wiktor Stribiżew,

5
Lo standard è ECMAScript 5 .
Wiktor Stribiżew,

1
OK. Bene, se sei sicuro e hai alcuni link a documenti a cui puoi rispondere. Valuterò. Non pensare che le specifiche ECMAScript siano un ottimo collegamento se è l'unico però.
Eric,

1
Quindi, che tipo di risposta ti aspetti? Tutto quello che ho pubblicato sopra + link alla descrizione della sintassi della regex di JS? Come riferimento MDN ?
Wiktor Stribiżew,

Risposte:


170

Rust Regex nella barra laterale Trova / Sostituisci nei file

Rob Lourens di MSFT ha scritto che la ricerca di file utilizza Rust regex. La documentazione del linguaggio Rust descrive la sintassi.

Rob Lourens su GitHub

JavaScript Regex nel widget Trova / Sostituisci in file

Alexandru Dima di MSFT ha scritto che il widget di ricerca utilizza regex JavaScript. Come ha commentato Wicktor, la documentazione di ECMAScript 5 descrive la sintassi. Lo stesso vale per la Guida alle espressioni regolari di MDN JavaScript .

Alexandru Dima su GitHub

Prova la differenza

La barra laterale Trova nei file non supporta (?=foobar)mentre il widget Trova nei file supporta tale sintassi lookahead.

Mostra un lookahead che funziona nel widget ma non nella barra laterale.

Per quanto riguarda Trova / Sostituisci con gruppi

Per trovare / sostituire con i gruppi, usare le parentesi ()per raggruppare e $1, $2, $3, $nda sostituire.

Ecco un esempio

Prima:

Questo è il testo prima della sostituzione.

Dopo:

Questo è il testo dopo la sostituzione.


12

La risposta di Shaun è ancora corretta, tuttavia per aggiungere un aggiornamento, recentemente VS Code ha aggiunto l'opzione per optare per l'utilizzo del motore PCRE2 basato su Perl . Puoi abilitarlo tramite la configurazione delle impostazioni.

Ciò consente di eseguire operazioni regex più avanzate come lookaheads e backreferences . Ma come indicato di seguito, la regex deve essere ancora una regex JavaScript valida .

VS Code supporta ricerche di espressioni regolari, tuttavia, i riferimenti e le risposte temporanee non sono supportati per impostazione predefinita. Ma puoi abilitarli con l'impostazione search.usePCRE2 . Questo configura ripgrep per usare il motore regex PCRE2. Mentre PCRE2 supporta molte altre funzionalità, supportiamo solo espressioni regex che sono ancora valide in JavaScript , poiché gli editor aperti vengono comunque cercati utilizzando la ricerca basata su JavaScript dell'editor.

E per un bonus se sei finito qui cercando di fare ricerche su più righe, VS Code ha recentemente aggiunto anche quella funzione !

inserisci qui la descrizione dell'immagine


PCRE2 può essere attivato nel menu delle impostazioni. Vai su Preferenze ~ Impostazioni e cerca 'regex'
DougR

Sembra che l'impostazione sia obsoleta e PCRE2 viene automaticamente utilizzato come fallback quando il motore predefinito non supporta una funzione.
Kevin Rak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.