[英]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/\\//\\\\/}
然后从那里建立起来。 问题是,我只想捕获文件名的一部分,然后在捕获的组上转换斜杠,而不使用固定/最大数量的文件名组件(在这种情况下,有一个丑陋、冗长的解决方案)
以下是正确的方向吗? 如果是这样,什么替换字符串会导致组 $1 但斜杠恢复?
${TM_DIRECTORY/.*\\/src(\\/([^\\/]+))+$/??????/}
在此先感谢,一个可以接受的回答是“除非你放松你的要求,否则没有办法”,这更像是一个关于正则表达式力量的理论问题。
您可以使用
"${TM_DIRECTORY/^.*?[\\\\\\/]src[\\\\\\/]|([\\\\\\/])/${1:+\\\\}/g}"
请参阅正则表达式演示(在结果字符串的开头有一个额外的\
,因为无法像 VS Code 中那样引入条件替换模式)。
详情:
^
- 字符串的开头.*?
- 除换行符之外的任何零个或多个字符,尽可能少[\\\/]
- /
或\
字符src
- 您需要删除子目录的目录名称[\\\/]
- 一个/
或\
字符|
- 或者([\\\/])
- 第 1 组:一个/
或\
字符。 ${1:+\\}
替换意味着我们仅在第 1 组匹配发生时才替换为\
。
请注意,反斜杠需要加倍,最后的g
替换所有出现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.