我正在尝试制作一个片段,它会根据一个变量(路由器接口(interface)名称)的输入做 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
最佳答案
您的问题不包括您希望最终代码段看起来像什么,因此这里有一个简单的代码段示例,它将所有这三个操作合并为一个,您可以根据需要进行调整。
<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 library regular expression并且格式字符串使用 Boost library format字符串(有关更多信息,请参阅 snippets 中关于 unofficial documentation 的页面)。
Boost格式字符串支持(?Ntrue:false)
形式的条件替换,其中对于捕获组N
,替换为文本如果匹配捕获到任何内容,则为 true
,否则为 false
。
这里捕获(或不捕获)正则表达式中的每个可能的替换,并且替换指定匹配的组应该扩展到什么。请注意,在执行此类操作时,您可能需要注意不同可能匹配项之间的相互作用。
关于regex - 具有 3 个正则表达式替换的 Sublime 文本片段替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50121434/