【问题标题】:Sublime text snippets substitutions with 3 regex replacements带有 3 个正则表达式替换的崇高文本片段替换
【发布时间】:2018-05-01 18:02:01
【问题描述】:

我正在尝试制作一个 sn-p,它将根据一个变量(路由器接口名称)的输入来做 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

【问题讨论】:

  • 如果不大写那会怎样呢?

标签: regex sublimetext3 sublimetext-snippet


【解决方案1】:

您的问题不包括您希望最终的 sn-p 是什么样子,所以这里有一个简单的 sn-p 示例,它将所有这三个操作合二为一,您可以根据需要进行调整。

<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 字符串(有关更多信息,请参见unofficial documentation 中的snippets 页面)。

Boost 格式字符串支持(?Ntrue:false) 形式的条件替换,其中对于捕获组N,如果匹配捕获任何内容,则替换为文本true,否则替换为false。

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

【讨论】:

  • 是的,这正是我需要的。从现在开始,我知道如何将多个正则表达式合并到一个变量中。谢谢 OdatNurd。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 2013-07-11
  • 2014-09-07
  • 2017-10-22
相关资源
最近更新 更多