web-dev-qa-db-fra.com

Quelle version de Regex le code Visual Studio utilise-t-il?

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

Outre la résolution de ce problème spécifique, je cherche des informations sur la saveur de Regexes dans Visual Studio Code et sur la manière de trouver de la documentation à ce sujet, afin de pouvoir m'aider à toute autre question sur laquelle je pourrais tomber.

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

101
Eric

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

Rob Lourens de MSFT écrit que la recherche de fichier utilise _ regex Rust. Le documentation en langage Rust décrit la syntaxe.

Rob Lourens on GitHub

Regex JavaScript dans le widget Rechercher/Remplacer dans un fichier

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

Alexandru Dima on GitHub

Testez la différence

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

Shows a lookahead working in the widget but not in the sidebar.

À propos de Rechercher/Remplacer avec des groupes

Pour rechercher/remplacer avec des groupes, utilisez les parenthèses () pour grouper et $1, $2, $3, $n pour remplacer.

Voici un exemple.

Avant:

This is the text before the replace.

Après:

This is the text after the replace.

137
Shaun Luttin

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

Cela vous permet d’effectuer des opérations regex plus avancées telles que des références de tête et des références arrières . Mais comme noté ci-dessous, la regex doit toujours être une expression rationnelle JavaScript valide .

VS Code prend en charge les recherches d'expression régulière, cependant, les références arrières et les références directes ne sont pas prises en charge par défaut. Mais vous pouvez les activer avec le paramètre search.usePCRE2 . Ceci configure ripgrep pour utiliser le moteur de 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 valables en JavaScript , car les éditeurs ouverts font toujours l'objet d'une recherche à l'aide de la recherche JavaScript de l'éditeur. .

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

enter image description here

7
protoEvangelion