Sublime 文本片段替换与 3 个正则表达式替换

A.D*_*usa 3 regex sublimetext3 sublimetext-snippet

我正在尝试制作一个片段,该片段将根据一个变量(路由器接口名称)的输入执行 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
Run Code Online (Sandbox Code Playgroud)

所以如果我进入一个普通的路由器接口,比如 ge-1/2/21

结果应该是 > IS-1_2_21-BUSINESS

但是如果我进入像ae31这样的界面

它应该使它成为资本 >>>> IS-AE31-BUSINESS

Oda*_*urd 6

您的问题不包括您希望最终的代码片段是什么样子,因此这是一个简单的代码片段示例,它将所有这三个操作合并为一个,您可以根据需要进行调整。

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

总体结构是${variable/regex/format_string/options}. 正则表达式使用Boost 库正则表达式,格式字符串使用Boost 库格式字符串(有关更多信息,请参阅非官方文档中的片段页面)。

Boost 格式字符串支持 形式的条件替换(?Ntrue:false),其中对于捕获组,替换是匹配捕获或未捕获任何内容的文本Ntruefalse

这里正则表达式中的每个可能的替换都会被捕获(或不捕获),并且替换指定匹配组应扩展为什么。请注意,在执行此类操作时,您可能需要了解不同可能匹配之间的相互作用。

运行中的片段