Quelle version de Regex utilise Visual Studio Code?


130

En essayant de rechercher-remplacer dans Visual Studio Code, je trouve que sa saveur Regex est différente de Visual Studio complet. Plus précisément, j'essaie de déclarer un groupe nommé avec string (?<p>[\w]+)qui fonctionne dans Visual Studio mais pas dans Visual Studio Code. Il se plaindra de l'erreur Invalid group.

En plus de résoudre ce problème spécifique, je recherche des informations sur la saveur des expressions régulières dans Visual Studio Code et où trouver de la documentation à ce sujet, afin que je puisse m'aider avec toutes les autres questions sur lesquelles je pourrais tomber.

Visual Studio complet utilise les expressions régulières .NET comme décrit ici . Ce lien est mentionné dans la documentation de VS Code ailleurs sur Stackoverflow, mais ce n'est pas le cas.


VSCode utilise un moteur de regex basé sur JavaScript, mais ce n'est pas la même chose. Vous ne pouvez pas y utiliser de groupes de capture nommés.
Wiktor Stribiżew

1
Il n'y a pas de documentation spécifique sur l'expression régulière utilisée dans VSCode. Cependant, si vous regardez le code source , vous verrez beaucoup de code JS autour. Si vous essayez d'utiliser des lookbehinds, vous obtenez une erreur de modèle non valide, tandis que les lookaheads fonctionnent. Et la saveur JS regex est le seul moteur regex qui traite le [^]motif comme correspondant à n'importe quel symbole. Donc, il est clair qu'il s'agit du moteur JS regex.
Wiktor Stribiżew

5
La norme est ECMAScript 5 .
Wiktor Stribiżew

1
D'ACCORD. Eh bien, si vous êtes sûr et que vous avez des liens vers des documents, vous pouvez répondre. Je vais voter. Ne pensez pas que la spécification ECMAScript est un excellent lien si c'est le seul.
Eric

1
Alors, quel genre de réponse attendez-vous? Tout ce que j'ai posté ci-dessus + lien vers la description de la syntaxe JS regex? Vous aimez la référence MDN ?
Wiktor Stribiżew

Réponses:


170

Rust Regex dans la barre latérale Rechercher / Remplacer dans les fichiers

Rob Lourens de MSFT a écrit que la recherche de fichiers utilise l'expression régulière Rust. La documentation du langage Rust décrit la syntaxe.

Rob Lourens sur GitHub

JavaScript Regex dans le widget Rechercher / Remplacer dans un fichier

Alexandru Dima de MSFT a écrit que le widget de recherche utilise l'expression régulière JavaScript. Comme l'a commenté Wicktor, la documentation d'ECMAScript 5 décrit la syntaxe. Il en va de même pour le Guide des expressions régulières JavaScript MDN .

Alexandru Dima sur GitHub

Testez la différence

La barre latérale de recherche dans les fichiers ne prend pas en charge (?=foobar)tandis que le widget de recherche dans le fichier prend en charge cette syntaxe d'anticipation.

Affiche une anticipation fonctionnant dans le widget mais pas dans la barre latérale.

Concernant la recherche / remplacement par des groupes

Pour trouver / remplacer par des groupes, utilisez des parenthèses ()pour regrouper et $1, $2, $3, $npour remplacer.

Voici un exemple.

Avant:

Ceci est le texte avant le remplacement.

Après:

Ceci est le texte après le remplacement.


12

La réponse de Shaun est toujours correcte, mais pour ajouter une mise à jour, VS Code a récemment ajouté la possibilité de choisir d'utiliser le moteur PCRE2 basé sur Perl . Vous pouvez l'activer via la configuration de vos paramètres.

Cela vous permet d'effectuer des opérations regex plus avancées telles que les lookaheads et les backreferences . Mais comme indiqué ci-dessous, l'expression régulière doit toujours être une expression régulière JavaScript valide .

VS Code prend en charge les recherches d'expressions régulières, cependant, les références arrière et les recherches ne sont pas prises en charge par défaut. Mais vous pouvez les activer avec le paramètre search.usePCRE2 . Cela configure ripgrep pour utiliser le moteur regex PCRE2. Bien que PCRE2 prenne en charge de nombreuses autres fonctionnalités, nous ne prenons en charge que les expressions regex qui sont toujours valides dans JavaScript , car les éditeurs ouverts sont toujours recherchés à l'aide de la recherche basée sur JavaScript de l'éditeur.

Et pour un bonus si vous avez fini par essayer de faire des recherches sur plusieurs lignes, VS Code a récemment ajouté cette fonctionnalité !

entrez la description de l'image ici


PCRE2 peut être activé dans le menu des paramètres. Allez dans Préférences ~ Paramètres et recherchez 'regex'
DougR

Il semble que ce paramètre est obsolète et PCRE2 est automatiquement utilisé comme solution de secours lorsque le moteur par défaut ne prend pas en charge une fonctionnalité.
Kevin Rak le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.