Welche Regex-Variante verwendet Visual Studio Code?

129

Beim Versuch, in Visual Studio-Code zu suchen und zu ersetzen, stelle ich fest, dass sich die Regex-Variante von der von Visual Studio unterscheidet. Insbesondere versuche ich, eine benannte Gruppe zu deklarieren, mit string (?<p>[\w]+)der in Visual Studio, jedoch nicht in Visual Studio Code funktioniert. Es wird sich mit dem Fehler beschweren Invalid group.

Abgesehen von der Lösung dieses speziellen Problems suche ich nach Informationen über den Geschmack von Regexes in Visual Studio Code und darüber, wo ich Dokumentation dazu finden kann, damit ich mir bei anderen Fragen helfen kann, auf die ich stoßen könnte.

Full Visual Studio verwendet reguläre .NET-Ausdrücke, wie hier dokumentiert . Dieser Link wird als Dokumentation für VS-Code an anderer Stelle in Stackoverflow erwähnt, ist es aber nicht.

Eric
quelle
VSCode verwendet eine JavaScript-basierte Regex-Engine, die jedoch nicht identisch ist. Sie können dort keine benannten Erfassungsgruppen verwenden.
Wiktor Stribiżew
1
Es gibt keine spezifische Dokumentation zu dem in VSCode verwendeten regulären Ausdruck. Wenn Sie sich jedoch den Quellcode ansehen , werden Sie viel JS-Code sehen. Wenn Sie versuchen, Lookbehinds zu verwenden, wird ein ungültiger Musterfehler angezeigt, während Lookaheads funktionieren. Und die JS-Regex-Variante ist die einzige Regex-Engine, die [^]Muster als mit einem Symbol übereinstimmend behandelt . Es ist also klar, dass es sich um eine JS-Regex-Engine handelt.
Wiktor Stribiżew
5
Der Standard ist ECMAScript 5 .
Wiktor Stribiżew
1
OK. Wenn Sie sich sicher sind und einige Links zu Dokumenten haben, können Sie antworten. Ich werde abstimmen. Denken Sie nicht, dass die ECMAScript-Spezifikation ein großartiger Link ist, wenn es der einzige ist.
Eric
1
Was für eine Antwort erwarten Sie? Alles, was ich oben gepostet habe + Link zur Beschreibung der JS-Regex-Syntax? Wie MDN Referenz ?
Wiktor Stribiżew

Antworten:

169

Rust Regex in der Seitenleiste Suchen / Ersetzen in Dateien

Rob Lourens von MSFT schrieb, dass die Dateisuche Rust Regex verwendet. Die Dokumentation zur Rust-Sprache beschreibt die Syntax.

Rob Lourens auf GitHub

JavaScript Regex im Widget Suchen / Ersetzen in Datei

Alexandru Dima von MSFT schrieb, dass das Such- Widget JavaScript-Regex verwendet. Wie Wicktor kommentierte, beschreibt die Dokumentation von ECMAScript 5 die Syntax. Dies gilt auch für das MDN JavaScript Regular Expression Guide .

Alexandru Dima auf GitHub

Testen Sie den Unterschied

Die Seitenleiste zum Suchen in Dateien wird nicht unterstützt, (?=foobar)während das Widget zum Suchen in Dateien diese Lookahead-Syntax unterstützt.

Zeigt einen Lookahead an, der im Widget, jedoch nicht in der Seitenleiste funktioniert.

In Bezug auf Suchen / Ersetzen durch Gruppen

Zum Suchen / Ersetzen mit Gruppen, die Verwendung Klammern ()zu gruppieren und $1, $2, $3, $nzu ersetzen.

Hier ist ein Beispiel.

Vor:

Dies ist der Text vor dem Ersetzen.

Nach dem:

Dies ist der Text nach dem Ersetzen.

Shaun Luttin
quelle
11

Shauns Antwort ist immer noch richtig. Um jedoch ein Update hinzuzufügen, hat VS Code kürzlich die Option hinzugefügt , sich für die Verwendung der Perl-basierten PCRE2-Engine zu entscheiden . Sie können dies über Ihre Einstellungskonfiguration aktivieren.

Auf diese Weise können Sie erweiterte Regex-Operationen wie Lookaheads und Backreferences ausführen . Aber wie bemerkt , unten, hat die Regex immer noch sein gültig JavaScript Regex .

VS Code unterstützt die Suche nach regulären Ausdrücken, Rückreferenzen und Lookaround werden jedoch standardmäßig nicht unterstützt. Sie können diese jedoch mit der Einstellung search.usePCRE2 aktivieren . Dadurch wird ripgrep für die Verwendung der PCRE2-Regex-Engine konfiguriert. Während PCRE2 viele andere Funktionen unterstützt, unterstützen wir nur Regex-Ausdrücke, die in JavaScript noch gültig sind , da offene Editoren weiterhin mit der JavaScript-basierten Suche des Editors durchsucht werden.

Und als Bonus, wenn Sie hier versucht haben, mehrzeilige Suchvorgänge durchzuführen, hat VS Code kürzlich auch diese Funktion hinzugefügt !

Geben Sie hier die Bildbeschreibung ein

protoEvangelion
quelle
PCRE2 kann im Einstellungsmenü aktiviert werden. Gehen Sie zu Einstellungen ~ Einstellungen und suchen Sie nach 'Regex'
DougR
Diese Einstellung ist anscheinend veraltet und PCRE2 wird automatisch als Fallback verwendet, wenn die Standard-Engine keine Funktion unterstützt.
Kevin Rak