Visual Studio Codeはどのような正規表現を使用していますか?


130

Visual Studio Codeで検索置換しようとすると、正規表現のフレーバーが完全なVisual Studioとは異なることがわかりました。具体的にstring (?<p>[\w]+)は、Visual Studioでは機能するがVisual Studio Codeでは機能しない名前付きグループを宣言しようとしています。エラーが表示されますInvalid group

この特定の問題の解決とは別に、私はVisual Studio CodeのRegexesのフレーバーに関する情報と、それに関するドキュメントの場所を探しています。

完全なVisual Studioは、ここに記載されているように.NET正規表現を使用します。このリンクは、VSコードのドキュメントとしてStackoverflowの他の場所で言及されていますが、そうではありません。


VSCodeはJavaScriptベースの正規表現エンジンを使用していますが、同じではありません。そこでは名前付きキャプチャグループを使用できません。
WiktorStribiżew2017

1
VSCodeで使用される正規表現に関する特定のドキュメントはありません。ただし、ソースコードを見ると、たくさんのJSコードが見られます。先読みを使用しようとすると、先読みは機能しますが、無効なパターンエラーが発生します。そして、JS正規表現フレーバーは、[^]パターンを任意の記号に一致するものとして扱う唯一の正規表現エンジンです。つまり、JS正規表現エンジンであることは明らかです。
WiktorStribiżew2017

5
標準はECMAScript 5です。
WiktorStribiżew2017

1
OK。まあ、あなたが確信していて、あなたが答えることができるドキュメントへのいくつかのリンクがあるなら。私は賛成します。ただし、ECMAScript仕様が唯一の仕様である場合は、それが優れたリンクであるとは思わないでください。
エリック

1
それで、あなたはどのような答えを期待していますか?上に投稿したものすべて+ JS正規表現構文の説明へのリンク?同様MDNリファレンス
WiktorStribiżew2017

回答:


170

ファイル内の検索/置換サイドバーのRust Regex

MSFTのRob Lourensは、ファイル検索ではRust regexを使用すると書いています。錆言語のドキュメントでは、構文について説明します。

GitHubのRob Lourens

ファイル内検索/置換ウィジェットのJavaScript正規表現

MSFTのAlexandru Dimaは、検索ウィジェットがJavaScript正規表現を使用すると書いています。Wicktorがコメントしたように、ECMAScript 5のドキュメントは構文を説明しています。MDN JavaScript正規表現ガイドも同様です。

GitHubのAlexandru Dima

違いをテストする

ファイルの検索サイドバーはサポートしていません(?=foobar)が、ファイルの検索ウィジェットはその先読み構文をサポートしています。

サイドバーではなくウィジェットで機能している先読みを表示します。

グループの検索/置換について

グループ、利用括弧で検索/置換するために()グループにして$1$2$3$n交換します。

例を示します。

前:

これは、置換前のテキストです。

後:

これは、置換後のテキストです。


12

Shaunの答えはまだ正しいですが、更新を追加するために、最近VS CodePerlベースのPCRE2エンジンの使用をオプトインするオプションを追加しまし。これは設定の構成で有効にできます。

これにより、先読みや後方参照などのより高度な正規表現操作を実行できます。ではなく指摘以下、正規表現はまだである必要があり、有効なJavaScriptの正規表現

VS Codeは正規表現検索をサポートしていますが、デフォルトでは後方参照とルックアラウンドはサポートされていません。しかし、search.usePCRE2の設定でこれらを有効にすることができます。これにより、ripgrepがPCRE2正規表現エンジンを使用するように構成されます。PCRE2は他の多くの機能をサポートしますが、開いているエディターは引き続きエディターのJavaScriptベースの検索を使用して検索されるため、JavaScript引き続き有効な正規表現のみがサポートされます

そして、ボーナスとして、ここで複数行の検索を試みた場合、VS Codeは最近その機能も追加しました

ここに画像の説明を入力してください


PCRE2は、設定メニューでアクティブにできます。Preferences〜Settingsに移動し、「regex」を検索します
DougR

その設定は非推奨になり、デフォルトのエンジンが機能をサポートしていない場合、フォールバックとしてPCRE2が自動的に使用されます。
Kevin Rak
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.