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

Я пытаюсь создать фрагмент, который будет выполнять 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 Ответ

0 голосов
/ 01 мая 2018

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

<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, если нет.

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

Snippet in action

...