匹配 Sublime Text 3 代码片段中的父文件夹
Match Parent Folder in Sublime Text 3 Snippet
我正在尝试创建一个输出文件父文件夹名称的片段。例如:
/Users/user/src/Page/index.js
returns
Page
我有这个正则表达式模式:
([^\/]+)(?:\/[^\/]+)$
根据 Regex101,第 1 组中的 Page/index.js
与 Page
匹配。
试试这个:
${1:${TM_FILEPATH/([^\/]+)(?:\/[^\/]+)$//}}
returns
/Users/user/src/
这让我觉得我这样做是完全错误的。
我不确定如何使用 Sublime/Perl 的字符串格式选项来实际 return 正确的字符串。我什至可能没有正确的模式。做这个的最好方式是什么?
我认为您可能会成为以下假设的受害者:当您使用替换来重写一个字段(或本例中的变量)时,整个变量将被替换为正则表达式中的替换文本。
实际上发生的是匹配正则表达式,变量中匹配的文本被替换为您在正则表达式中提供的替换,然后插入整个(新修改的)变量值。
例如,采用以下片段:
<snippet>
<content><![CDATA[
${TM_FILEPATH/./=/}
]]></content>
<tabTrigger>lpc</tabTrigger>
<description>Last path component of the current file</description>
</snippet>
即"match any character, replace it with an equal sign"。如果展开此代码段,结果为:
=home/tmartin/Test/sample.txt
第一个斜杠匹配并被替换,然后变量扩展为一条奇怪的断开路径。
因此,为了只捕获最后一个路径组件,您使用的正则表达式必须完全消耗整个变量值,以便替换只用您想要的部分替换整个值。
一个(可能 ham-handed)例子是这个片段:
<snippet>
<content><![CDATA[
${TM_FILEPATH/^.*\/([^\/]+)\/[^\/]+$//}
]]></content>
<tabTrigger>lpc</tabTrigger>
<description>Last path component of the current file</description>
</snippet>
现在从字符串的开头贪婪地匹配所有内容,然后是斜杠,然后是捕获最后一个路径段的捕获组,然后是最后一个斜杠和该行的其余部分,直到结尾字符串。
这种情况下的替换更符合您的预期:
Test
我正在尝试创建一个输出文件父文件夹名称的片段。例如:
/Users/user/src/Page/index.js
returns
Page
我有这个正则表达式模式:
([^\/]+)(?:\/[^\/]+)$
根据 Regex101,第 1 组中的 Page/index.js
与 Page
匹配。
试试这个:
${1:${TM_FILEPATH/([^\/]+)(?:\/[^\/]+)$//}}
returns
/Users/user/src/
这让我觉得我这样做是完全错误的。
我不确定如何使用 Sublime/Perl 的字符串格式选项来实际 return 正确的字符串。我什至可能没有正确的模式。做这个的最好方式是什么?
我认为您可能会成为以下假设的受害者:当您使用替换来重写一个字段(或本例中的变量)时,整个变量将被替换为正则表达式中的替换文本。
实际上发生的是匹配正则表达式,变量中匹配的文本被替换为您在正则表达式中提供的替换,然后插入整个(新修改的)变量值。
例如,采用以下片段:
<snippet>
<content><![CDATA[
${TM_FILEPATH/./=/}
]]></content>
<tabTrigger>lpc</tabTrigger>
<description>Last path component of the current file</description>
</snippet>
即"match any character, replace it with an equal sign"。如果展开此代码段,结果为:
=home/tmartin/Test/sample.txt
第一个斜杠匹配并被替换,然后变量扩展为一条奇怪的断开路径。
因此,为了只捕获最后一个路径组件,您使用的正则表达式必须完全消耗整个变量值,以便替换只用您想要的部分替换整个值。
一个(可能 ham-handed)例子是这个片段:
<snippet>
<content><![CDATA[
${TM_FILEPATH/^.*\/([^\/]+)\/[^\/]+$//}
]]></content>
<tabTrigger>lpc</tabTrigger>
<description>Last path component of the current file</description>
</snippet>
现在从字符串的开头贪婪地匹配所有内容,然后是斜杠,然后是捕获最后一个路径段的捕获组,然后是最后一个斜杠和该行的其余部分,直到结尾字符串。
这种情况下的替换更符合您的预期:
Test