簡體   English   中英

TextMate 變換以替換匹配重復組中的單個字符

[英]TextMate transform to replace single character in matched repetitive group

TL;DR 向我展示了一個通用的 vscode 片段,用於將“/home/me/projects/project/src/Commands/Interfaces/Whatever”轉換為“Commands\Interfaces\Whatever”

大家好,我正在使用 Vscode 並試圖找出文件目錄的簡單轉換以插入 PHP 命名空間。 到目前為止,我無法為這個看似平凡的問題找到一個簡單、通用的解決方案:

  • 有沒有辦法在片段中轉換 TM_DIRECTORY 變量的一部分,以便每個正斜杠都變成反斜杠?

乍一看,這似乎很微不足道,對吧? 從...開始

${TM_DIRECTORY/\\//\\\\/}

然后從那里建立起來。 問題是,我只想捕獲文件名的一部分,然后在捕獲的組上轉換斜杠,而不使用固定/最大數量的文件名組件(在這種情況下,有一個丑陋、冗長的解決方案)

以下是正確的方向嗎? 如果是這樣,什么替換字符串會導致組 $1 但斜杠恢復?

${TM_DIRECTORY/.*\\/src(\\/([^\\/]+))+$/??????/}

在此先感謝,一個可以接受的回答是“除非你放松你的要求,否則沒有辦法”,這更像是一個關於正則表達式力量的理論問題。

您可以使用

"${TM_DIRECTORY/^.*?[\\\\\\/]src[\\\\\\/]|([\\\\\\/])/${1:+\\\\}/g}"

請參閱正則表達式演示(在結果字符串的開頭有一個額外的\ ,因為無法像 VS Code 中那樣引入條件替換模式)。

詳情

  • ^ - 字符串的開頭
  • .*? - 除換行符之外的任何零個或多個字符,盡可能少
  • [\\\/] - /\字符
  • src - 您需要刪除子目錄的目錄名稱
  • [\\\/] - 一個/\字符
  • | - 或者
  • ([\\\/]) - 第 1 組:一個/\字符。

${1:+\\}替換意味着我們僅在第 1 組匹配發生時才替換為\

請注意,反斜杠需要加倍,最后的g替換所有出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM