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