Какой вариант регулярного выражения используется в коде Visual Studio?

Я знаю, что могу использовать регулярные выражения Ruby в файле tmLanguage, однако, похоже, это не так в других файлах конфигурации, например. для расширений. Возьмем, к примеру, значение firstLine в вкладе языка. Я получаю ошибки, когда использую классы символов (например, \s или \p{L}). Поэтому мне интересно, что на самом деле разрешено там. Как бы вы сопоставили пробелы там?

Обновление: после комментариев я попробовал это:

"firstLine": "^(lexer|parser)?\\s*grammar\\w+;"

который должен соответствовать первой строке, такой как lexer grammar G1; или просто grammar G1;. Есть ли способ проверить, работает ли этот RE, потому что у меня нет проверки в противном случае?

Обновление 2:

Очень важно использовать правильную грамматику, и она волшебным образом сработает:

"firstLine": "^(lexer|parser)?\\s*grammar\\s*\\w+\\s*;"

person Mike Lischke    schedule 21.08.2016    source источник
comment
Вы не показали свое полное значение firstLine, поэтому я не вижу, не забыли ли вы избежать обратной косой черты, например \\s.   -  person Andrew Morton    schedule 21.08.2016
comment
Нет, я не сбежал \s. Это не было необходимо в моем файле tmLanguage.   -  person Mike Lischke    schedule 21.08.2016
comment
В вашем обновлении конечная точка с запятой должна быть необязательной? Вы, кажется, имеете это как требуется. Поскольку это файл json, вам нужно экранировать обратную косую черту.   -  person Andrew Morton    schedule 21.08.2016
comment
Что касается тестирования, я полагаю, вы можете протестировать его на файлах, с которыми вы ожидаете, что он будет работать.   -  person Andrew Morton    schedule 21.08.2016


Ответы (1)


Регулярные выражения .NET используют синтаксис, который в значительной степени основан на Perl 5, однако он добавляет несколько новых функций, таких как именованные группы захвата и сопоставление справа налево, поэтому их не следует рассматривать как идентичные. Вот полная документация MSDN для регулярных выражений .NET:

Регулярные выражения .NET Framework

\s — допустимый класс символов в .NET, но трудно точно сказать, в чем проблема, не видя кода, который вы пытаетесь использовать. Эндрю может быть прав, что вы просто не избежали \.

person iliketocode    schedule 21.08.2016
comment
VS Code не использует регулярные выражения .NET. См. также этот вопрос. - person Eric; 11.02.2017
comment
@ Эрик, вопрос, на который вы ссылаетесь, касается виджета поиска, а не файла определения подсветки синтаксиса, используемого для создания нового языка ... - person Igor Popov; 22.05.2017
comment
Да ну вопросы практически идентичные. Не содержание, а фактический заголовок вопроса. - person Eric; 25.05.2017