[英]Applying 2 regex operation in sublime text 3 snippet
我正在嘗試為 sublime text 3 制作一個片段,我想將文件名變量(TM_FILENAME)轉換為大寫並將“.c”替換為“_H”。 我有表達方式,但不是同時。
我試圖把它們放在一起,但是沒有用。
我擁有的片段文件的內容:
#ifndef ${1:${TM_FILENAME/\..+$/_H/}}
# define ${1:${TM_FILENAME}}
${1/(.*)/\U$1/\E}
$0
#endif
文件名為 test.c,結果如下:
#ifndef test_H
# define test_H
TEST_H
#endif
第三行是我想要的,但我想要在 ifndef 和定義之后。
所以我需要將第三行的正則表達式與第一行結合起來。
正如@keith-hall 在對您的問題的評論中提到的那樣,這可以通過利用 Sublime 使用boost regex 語法來匹配和提升格式字符串來創建替換文本這一事實來實現。
這暴露的功能之一是替換文本中的條件表達式的想法:
性格 '?' 開始一個條件表達式,一般形式是:
?Ntrue-expression:false-expression
其中 N 是十進制數字。
如果子表達式 N 匹配,則評估 true-expression 並將其發送到 output,否則評估 false-expression 並將其發送到 output。
這意味着對於包含在正則表達式中的每個捕獲組,您可以指定應該替換為兩個單獨的文本項; 當組捕獲一些文本時替換文本,當它沒有捕獲一些文本時替換文本。
根據您上面的問題,一個例子是這樣的:
${1:${TM_FILENAME/(\.c)|(.)/(?1_H:)(?2\u$2:)/g}}
這里的正則表達式部分是(\.c)|(.)
,它匹配文字文本.c
(第 1 組)或任何單個字符(第 2 組)。
在替換文本中, (?1_H:)
表示如果第一個捕獲組捕獲了任何文本,則替換它應該是文字文本_H
; 否則替換文本應該是一個空字符串。
之后, (?2\u$2:)
表示如果捕獲組 2 捕獲了任何內容,則替換文本應該是字符的大寫版本; 否則替換應該是一個空字符串。
由於輸入正則表達式有一個交替( |
字符),正則表達式匹配一個或另一個; 所以在替換文本中只有一組或另一組有任何文本,output 會相應地采取行動。
正則表達式中的選項指定g
以確保將正則表達式應用於所有內容; 否則它只會匹配一次,在這種情況下會產生大寫文件名中的第一個字符然后停止的效果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.