Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex look behind in VS Code?

I'm working on a grammar extension in VS Code, and I'm having difficulty with a look behind regex pattern. Given the following string, I want to only return cmp when it's preceded by the @fmt(

@fmt(cmp,foo)

The matching string I used in another editor was this:

(?<=[@|©](fmt)\()(\w+)

However, this is not working in VS Code, when I do a regex search it comes back with the error that it's not a valid expression. Playing around with it, the problem is the <= characters, which indicate the look behind.

Doing a search of the VS Code website doesn't return any kind of regex reference guide. Searching Stack Overflow came up with this question, which states that Visual Studio has a unique regex definitions. Unfortunately, the example given in that question doesn't work in VS Code.

Does anyone know how to do a look behind regex in VS Code? Or at least know where the regex documentation for VS Code is located?

I worry that it's not possible, since according to Stack Overflow reference look behinds aren't supported in JavaScript. There is another question that shows how to mimic look behinds in a JavaScript function, but I don't know if it's possible to extend a language in VS Code with user-defined functions. If anyone knows how to do that, and can point me in that direction, that would also be an acceptable workaround.

like image 995
thomasjbarrett Avatar asked Oct 07 '16 11:10

thomasjbarrett


People also ask

What is look behind regex?

Regex Lookbehind is used as an assertion in Python regular expressions(re) to determine success or failure whether the pattern is behind i.e to the right of the parser's current position. They don't match anything. Hence, Regex Lookbehind and lookahead are termed as a zero-width assertion.

How do you use positive look behind?

The construct for positive lookbehind is (?<=text): a pair of parentheses, with the opening parenthesis followed by a question mark, “less than” symbol, and an equals sign. Negative lookbehind is written as (?<!text), using an exclamation point instead of an equals sign.

How do you use negative look ahead?

Negative lookahead That's a number \d+ , NOT followed by € . For that, a negative lookahead can be applied. The syntax is: X(?! Y) , it means "search X , but only if not followed by Y ".

What is a negative lookahead regex?

In this type of lookahead the regex engine searches for a particular element which may be a character or characters or a group after the item matched. If that particular element is not present then the regex declares the match as a match otherwise it simply rejects that match.


1 Answers

You can use infinite-width lookahead and lookbehind without any constraint now beginning with Visual Studio Code v.1.31.0 release.

See proof:

enter image description here

and another one (with (?<=@fmt\([^()]*)\w+ pattern, note the * in the lookbehind):

enter image description here

See the Github [VSCode 1.31] ES2018 RegExp lookbehind assertions are now supported #68004 issue:

As a result of moving to Electron 3.0, RegExp lookbehind assertions are now supported, since they’re supported since Chromium 62 and Node 8.10.0, and Electron 3.0 uses Chromium 66 and Node 10.2.0, so they’re now supported, but the release notes don’t mention that lookbehind assertions are now supported.

VS Code developers confirm that it is true that they "forgot to mention it in the release notes".

like image 87
Wiktor Stribiżew Avatar answered Sep 28 '22 02:09

Wiktor Stribiżew