Какой вид Regex использует Visual Studio Code?


130

Пытаясь выполнить поиск-замену в Visual Studio Code, я обнаружил, что его версия Regex отличается от полноценной Visual Studio. В частности, я пытаюсь объявить именованную группу, с string (?<p>[\w]+)которой работает в Visual Studio, но не в Visual Studio Code. Он пожалуется на ошибку Invalid group.

Помимо решения этой конкретной проблемы, я ищу информацию об особенностях регулярных выражений в коде Visual Studio и о том, где найти документацию по этому поводу, чтобы я мог помочь себе с любыми другими вопросами, на которые я могу наткнуться.

Полная версия Visual Studio использует регулярные выражения .NET, как описано здесь . Эта ссылка упоминается как документация для VS Code в другом месте на Stackoverflow, но это не так.


VSCode использует движок регулярных выражений на основе JavaScript, но это не то же самое. Вы не можете использовать там именованные группы захвата.
— Wiktor Stribiew

1
Нет специальной документации по регулярному выражению, используемому в VSCode. Однако, если вы посмотрите на исходный код , вы увидите много JS-кода. Если вы попытаетесь использовать просмотр назад, вы получите ошибку неверного шаблона, в то время как просмотр вперед будет работать. И разновидность регулярных выражений JS - единственный движок регулярных выражений, который обрабатывает [^]шаблон как соответствующий любому символу. Итак, ясно, что это движок регулярных выражений JS.
— Wiktor Stribiew

5
Стандарт - ECMAScript 5 .
— Wiktor Stribiew

1
ХОРОШО. Что ж, если вы уверены и у вас есть ссылки на документы, вы можете ответить. Я буду голосовать за. Не думайте, что спецификация ECMAScript - отличная ссылка, если она единственная.
— Эрик

1
Итак, какого ответа вы ожидаете? Все, что я опубликовал выше + ссылка на описание синтаксиса JS regex? Нравится ссылка на MDN ?
— Wiktor Stribiew

Ответы:


171

Rust Regex на боковой панели поиска / замены в файлах

Роб Лоуренс из MSFT написал, что для поиска файлов используется регулярное выражение Rust. Документация по языку Rust описывает синтаксис.

Роб Лоренс на GitHub

JavaScript Regex в виджете "Найти / заменить в файле"

Александру Дима из MSFT написал, что виджет поиска использует регулярное выражение JavaScript. Как прокомментировал Виктор, документация ECMAScript 5 описывает синтаксис. То же самое и в Руководстве по регулярным выражениям JavaScript в MDN .

Александру Дима на GitHub

Проверить разницу

Боковая панель поиска в файлах не поддерживает, (?=foobar)тогда как виджет поиска в файле поддерживает этот синтаксис просмотра вперед.

Показывает просмотр вперед, работающий в виджете, но не на боковой панели.

Что касается поиска / замены с группами

Для поиска / замены с группами, использование скобок ()в группе и $1, $2, $3, $nзаменить.

Вот пример.

Перед:

Это текст перед заменой.

После:

Это текст после замены.


12

Ответ Шона по- прежнему верен, однако, чтобы добавить обновление, недавно VS Code добавил возможность выбрать использование движка PCRE2 на основе Perl . Вы можете включить это в настройках config.

Это позволяет вам выполнять более сложные операции с регулярными выражениями, такие как просмотр вперед и обратные ссылки . Но, как указано ниже, регулярное выражение по-прежнему должно быть действительным регулярным выражением JavaScript .

VS Code поддерживает поиск по регулярным выражениям, однако обратные ссылки и поиск по умолчанию не поддерживаются. Но вы можете включить их с помощью настройки search.usePCRE2 . Это настраивает ripgrep для использования механизма регулярных выражений PCRE2. Хотя PCRE2 поддерживает многие другие функции, мы поддерживаем только регулярные выражения, которые все еще действительны в JavaScript , потому что поиск в открытых редакторах по-прежнему выполняется с помощью поиска редактора на основе JavaScript.

И в качестве бонуса, если вы закончили здесь, пытаясь выполнять многострочный поиск, VS Code недавно также добавил эту функцию !

введите описание изображения здесь


PCRE2 можно активировать в меню настроек. Перейдите в Настройки ~ Настройки и найдите 'regex'
— DougR

Похоже, что этот параметр устарел , и PCRE2 автоматически используется как резерв, если механизм по умолчанию не поддерживает функцию.
— Кевин Рак,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.