Regex в коде Visual Studio: неверное сопоставление завершается с ошибкой «Нераспознанный флаг» - PullRequest
0 голосов
/ 03 сентября 2018

Редактировать: Как указали несколько комментаторов, оно должно быть ^class (?!Migration)[A-Z][a-z]*. Но VS Code жалуется: Error parsing regex near "ss (?!Migr' at character offset 9: Unrecognized flag: '!'. (Allowed flags: i, m, s, U, u, x.)

Visual Studio, кажется, поддерживает отрицательный взгляд в будущее (см. «Обесценить совпадение») . Не удалось найти ответ на вопрос, поддерживает ли VSCode это.


В VS Code я пытаюсь найти определения классов в проекте Django через Shift+Command+F. Включил поиск регулярных выражений. Теперь мой шаблон поиска такой:

^class [A-Z][a-z]*

Таким образом, каждый случай «класса Abc», где Abc - это имя класса, будет найден.

Теперь я бы хотел исключить такие классы, как class Migration(...) или class Command(...)

Я пытался сделать это с негативным взглядом, вот так:

^class (!?Migration)[A-Z][a-z]*

Но это не сработает. VS Code покажет мне все классы с именем class Migration(...), поэтому вместо исключения он сосредоточится на нем.

Чего мне не хватает?

1 Ответ

0 голосов
/ 03 сентября 2018

Обратите внимание, что для того, чтобы ваши шаблоны с lookaheads работали, вам нужно отредактировать файл settings.json для установки

"search.usePCRE2": true

См. Примечания к выпуску v1.29 :

Теперь также можно использовать обратные ссылки и прогнозные утверждения в поисках регулярных выражений, установив "search.usePCRE2": true. Это настраивает ripgrep использовать механизм регулярных выражений PCRE2. В то время как PCRE2 поддерживает множество других функции, мы поддерживаем только выражения регулярных выражений, которые по-прежнему действительны в JavaScript, потому что открытые редакторы по-прежнему ищут с помощью редактора Поиск на основе JavaScript.

Также см. Ответ Марка , который заметил эту опцию ранее.

Тогда ваше ^class (?!Migration)[A-Z][a-z]* регулярное выражение будет работать.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...