Який аромат Regex використовує Visual Studio Code?


130

Намагаючись шукати-замінювати в коді Visual Studio, я виявляю, що його аромат Regex відрізняється від повного Visual Studio. Зокрема, я намагаюся оголосити іменовану групу, string (?<p>[\w]+)яка працює в Visual Studio, але не в коді Visual Studio. Він поскаржиться на помилку Invalid group.

Окрім вирішення цього конкретного питання, я шукаю інформацію про аромат Regexes у коді Visual Studio і де знайти документацію про нього, тому я можу допомогти собі у будь-яких інших питаннях, на які я можу зіткнутися.

Повна Visual Studio використовує .NET регулярні вирази, як це зафіксовано тут . Це посилання згадується як документація для коду VS в іншому місці Stackoverflow, але це не так.


VSCode використовує механізм регулярного вирівнювання на основі JavaScript, але це не те саме. Ви не можете використовувати названі групи захоплення там.
Wiktor Stribiżew

1
Немає конкретної документації щодо регулярного виразу, який використовується у VSCode. Однак, якщо ви подивитеся на вихідний код , ви побачите багато JS-коду навколо. Якщо ви спробуєте скористатися lookbehinds, ви отримаєте помилкову помилку шаблону, тоді як lookaheads працює. А аромат JS regex - єдиний двигун регулярного випромінювання, який розглядає [^]візерунок як будь-який символ. Отже, зрозуміло, що це двигун JS regex.
Wiktor Stribiżew

5
Стандарт - ECMAScript 5 .
Wiktor Stribiżew

1
ГАРАЗД. Добре, якщо ви впевнені, і у вас є кілька посилань на документи, на які ви можете відповісти. Я підтримаю. Не думайте, що специфікація ECMAScript є чудовою ланкою, якщо вона є єдиною.
Ерік

1
Отже, якої відповіді ви очікуєте? Все, що я розмістив вище + посилання на опис синтаксису регексу JS? Як MDN посилання ?
Wiktor Stribiżew

Відповіді:


170

Rust Regex у пошуку / заміні у бічній панелі файлів

Роб Луренс з MSFT написав, що для пошуку файлів використовується Rust regex. Документація мови Rust описує синтаксис.

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

JavaScript Regex у віджеті "Знайти / замінити" у файлі

Олександру Діма з MSFT написав, що віджет find використовує регулярний вираз JavaScript. Як прокоментував Wicktor, документація ECMAScript 5 описує синтаксис. Так само і посібник з регулярних виразів MDN JavaScript .

Олександру Діму на GitHub

Перевірте різницю

Знахідка у бічній панелі файлів не підтримує, (?=foobar)тоді як віджет знаходження у файлі підтримує цей синтаксис пошуку.

Показує підказку, яка працює у віджеті, але не на бічній панелі.

Щодо пошуку / заміни на групи

Для пошуку / заміни з групами, використання дужок ()в групі і $1, $2, $3, $nзамінити.

Ось приклад.

Перед:

Це текст перед заміною.

Після:

Це текст після заміни.


12

Відповідь Шона все ще правильна, проте для додання оновлення нещодавно VS Code додав можливість увімкнути використання двигуна PCRE2 на основі Perl . Ви можете ввімкнути це через конфігурацію налаштувань.

Це дозволяє виконувати більш вдосконалені операції з вирівнюванням, як-от пошук і зворотній зв'язок . Але, як зазначено нижче, регулярний вигляд ще повинен бути дійсним JavaScript .

Код VS підтримує пошук регулярних виразів, однак, зворотні параметри та спосіб пошуку не підтримуються за замовчуванням. Але їх можна ввімкнути за допомогою налаштування search.usePCRE2 . Це налаштовує ripgrep для використання двигуна регулярного вибору PCRE2. Хоча PCRE2 підтримує безліч інших функцій, ми підтримуємо лише вирази з регулярними виразами, які все ще діють в JavaScript , оскільки відкриті редактори все ще шукають за допомогою пошуку на основі редактора.

А для бонусу, якщо ви опинилися тут, намагаючись зробити багаторядковий пошук, нещодавно VS Code додав цю функцію !

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


PCRE2 можна активувати в меню налаштувань. Перейдіть до Налаштування ~ Налаштування та шукайте 'regex'
DougR

Схоже, це налаштування застаріле , і PCRE2 автоматично використовується як резервний, коли двигун за замовчуванням не підтримує функцію.
Кевін Рак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.