首页 > 解决方案 > 带有 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

标签: regexsublimetext3sublimetext-snippet

解决方案


您的问题不包括您希望最终代码段的外观,所以这里有一个简单的代码段示例,它将所有这三个操作合并为一个,您可以根据需要进行调整。

<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,则替换是文本。truefalse

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

片段在行动


推荐阅读