Возвышенные замены фрагментов текста с 3 заменами регулярных выражений

Я пытаюсь сделать фрагмент, который будет делать 3 вещи в зависимости от ввода одной переменной (имя интерфейса маршрутизатора). Я заставил регулярное выражение работать правильно, но оно работает отдельно.

remove xx-           >>>>>       IS-${310/\w{2}-//g}-BUSINESS
replace / with _     >>>>>       IS-${310/\//_/g}-BUSINESS
ae make it capital   >>>>>       IS-${310/(ae)/\U$1/g}-BUSINESS

Так что, если я войду в нормальный интерфейс маршрутизатора, как ge-1/2/21

Результат должен быть> IS-1_2_21-BUSINESS

Но если я войду в интерфейс, как ae31

это должно сделать его столичным >>>> IS-AE31-BUSINESS

1 ответ

Решение

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

<snippet>
    <content><![CDATA[
# ${310}
IS-${310/(ae)|(?:(\w{2}-))|(?:(\/))/(?1\U$1:)(?2:)(?3:_)/g}-BUSINESS
]]></content>
    <tabTrigger>test</tabTrigger>
</snippet>

Общая структура ${variable/regex/format_string/options}, Регулярное выражение использует регулярное выражение библиотеки Boost, а строка формата использует строку формата библиотеки Boost (дополнительную информацию см. На странице с фрагментами в неофициальной документации).

Строка формата Boost поддерживает условную замену в виде (?Ntrue:false) где для захвата группы N замена текста true если матч захватил что-нибудь или false если это не так.

Здесь каждое из возможных изменений в регулярном выражении фиксируется (или нет), и замена указывает, на что должна расширяться эта сопоставляемая группа. Обратите внимание, что, когда вы делаете что-то подобное, вам может понадобиться учитывать взаимодействие между различными возможными совпадениями.

Фрагмент в действии

Другие вопросы по тегам