ChatGPT解决这个技术问题 Extra ChatGPT

What flavor of Regex does Visual Studio Code use?

Trying to search-replace in Visual Studio Code, I find that its Regex flavor is different from full Visual Studio. Specifically, I try to declare a named group with string (?<p>[\w]+) which works in Visual Studio but not in Visual Studio Code. It'll complain with the error Invalid group.

Apart from solving this specific issue, I'm looking for information about the flavor of Regexes in Visual Studio Code and where to find documentation about it, so I can help myself with any other questions I might stumble upon.

Full Visual Studio uses .NET Regular Expressions as documented here. This link is mentioned as the documentation for VS Code elsewhere on Stackoverflow, but it's not.

VSCode is using JavaScript-based regex engine, but it is not the same. You cannot use named capturing groups there.
There is no specific documentation on the regex used in VSCode. However, if you have a look at the source code, you will see lots of JS code around. If you try using lookbehinds, you get invalid pattern error, while lookaheads work. And the JS regex flavor is the only regex engine that treats [^] pattern as matching any symbol. So, it is clear it is JS regex engine.
The standard is ECMAScript 5.
OK. Well if you're sure and you have some links to docs you can answer. I'll upvote. Don't think the ECMAScript spec is a great link if it's the only one though.
So, what kind of answer do you expect? All what I posted above + link to the JS regex syntax description? Like MDN reference?

S
Shaun Luttin

Rust Regex in the Find/Replace in Files Sidebar

Rob Lourens of MSFT wrote that the file search uses Rust regex. The Rust language documentation describes the syntax.

https://i.stack.imgur.com/XSq5F.png

JavaScript Regex in the Find/Replace in File Widget

Alexandru Dima of MSFT wrote that the find widget uses JavaScript regex. As Wicktor commented, ECMAScript 5's documentation describes the syntax. So does the MDN JavaScript Regular Expression Guide.

https://i.stack.imgur.com/HeiEz.png

Test the Difference

The find in files sidebar does not support (?=foobar) whereas the find in file widget does support that lookahead syntax.

https://i.stack.imgur.com/PTvcq.png

Regarding Find/Replace with Groups

To find/replace with groups, use parentheses () to group and $1, $2, $3, $n to replace.

Here is an example.

Before:

https://i.stack.imgur.com/Lo9Ce.png

After:

https://i.stack.imgur.com/tBPeI.png


It's possible to debug regex here: rustexp.lpil.uk
p
protoEvangelion

Shaun's answer is still correct, however to add an update, recently VS Code added the option to opt into using the Perl based PCRE2 engine. You can enable this through your settings config.

This allows you to perform more advanced regex operations like lookaheads and backreferences. But as noted below, the regex still has to be valid JavaScript regex.

VS Code does support regular expression searches, however, backreferences and lookaround aren't supported by default. But you can enable these with the setting search.usePCRE2. This configures ripgrep to use the PCRE2 regex engine. While PCRE2 supports many other features, we only support regex expressions that are still valid in JavaScript, because open editors are still searched using the editor's JavaScript-based search.

And for a bonus if you ended up here trying to do multi line searches, VS Code recently added that feature as well!

https://i.stack.imgur.com/m8Gwq.png


PCRE2 can be activated in the settings menu. Go to Preferences~Settings and search for 'regex'
Looks like that setting is deprecated, and PCRE2 is automatically used as fallback when the default engine doesn't support a feature.
v
v.slobodzian

I've found newer information (July 22, 2020) about it.

IllusionMH left the following comment in Github:

ripgrep (compatible with PCRE2) is already used for Find in files functionality (for not open editors) and JS engine used only for open editors.