在VS代码段中将路径转换为名称空间

时间:2019-01-12 12:53:42

标签: regex visual-studio-code code-snippets

我正在尝试创建一个VS代码片段,以基于项目中的当前文件夹来构建命名空间。

TM_DIRECTORY变量提供的当前路径可能是这样的。

/Users/bernhardrichter/GitHub/heatkeeper2000/src/HeatKeeper.Server/Mapping

基于我的根源文件夹为namespace HeatKeeper.Server.Mapping,我想结束的是src

所以我需要剥离src之前和包括的所有内容,以便我们得到HeatKeeper.Server/Mapping的支持。然后我需要将/替换(转换)为.,以便最终结果为HeatKeeper.Server.Mapping

是否可以在单个转换中执行此操作?如果没有,是否可以进行多次转换?

这是我到目前为止所拥有的

"namespace ${TM_DIRECTORY/(.*src.)(.*).*$/$2/}"

这将输出namespace HeatKeeper.Server/Mapping,这几乎是我想要的。我只需要将所有/替换为.

问题是我不知道将转换放在哪里。

转换看起来像这样。

"${TM_DIRECTORY/[\\/]/./g}"

这给了我

.Users.bernhardrichter.GitHub.heatkeeper2000.src.HeatKeeper.Server.Mapping

我只是不知道如何将两者结合在一起?

1 个答案:

答案 0 :(得分:0)

是的,您可以在一个代码段中完成它们,只需在src之后分别捕获两个目录。试试:

  "namespace ${TM_DIRECTORY/.*src\\/(.*)\\/(.*)$/$1.$2/}",

然后在两个捕获组之间放置一个period。此正则表达式假定您始终在想要的两个目录之前有一个src目录。如果不是这种情况,将可以捕获最后两个目录:

  "namespace ${TM_DIRECTORY/.*\\/(.*)\\/(.*)$/$1.$2/}",

请注意,路径分隔符“ /”必须两次转义。