gpt4 book ai didi

regex - 将路径转换为 ​​VS Code 代码片段中的命名空间

转载 作者:行者123 更新时间:2023-12-02 20:08:22 26 4
gpt4 key购买 nike

我正在尝试创建一个 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

我只是不知道如何将这两者结合起来?

最佳答案

编辑后查看更通用的答案(不仅仅是最后两个目录)。


原答案:

是的,您可以在一个片段中完成这些操作,您只需分别捕获 src 之后的两个目录即可。尝试:

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

然后在两个捕获组之间添加一个句点。此正则表达式假设您始终在所需的两个目录之前有一个 src 目录。如果不是这种情况,这将捕获最后两个目录:

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

请注意,路径分隔符“/”必须进行双转义。

编辑------------------------见下文----------------- ------------------------------------------

对于更一般特定目录后一些未知数量的目录的情况,请尝试以下形式:

"body": "${TM_DIRECTORY/.*src\\/(([^\\/]*)(\\/)?)|(\\/)([^\\/]*)/$2${3:+.}${5:+.}$5/g}",

// here for easier testing using the clipboard
"body": "${CLIPBOARD/.*src\\/(([^\\/]*)(\\/)?)|(\\/)([^\\/]*)/$2${3:+.}${5:+.}$5/g}",

src出现的地方,放置您不想要的最后一个目录。这适用于 src 之后的 1 个或多个目录(在本例中)。

有趣的是,这是最棘手的一个文件夹案例。这是通过额外的条件 ${3:+.} 解决的,这意味着如果存在捕获组 3,则插入 .

有关正则表达式的说明,请参阅 reg101 demo 。在该链接中,您可以看到除一个文件夹情况之外的更简单的替换。如果您不介意在最后一个 . 上退格,您可以使用替换 $2.$5 而不是 $2${3:+.}${ 5:+.}$5 我上面用过。

最后,请注意,上述内容旨在与正斜杠 / 路径分隔符一起使用。要修改它以使用后/正斜杠分隔符,请查看此内容(将 USERS 作为最后一个不需要的目录):

   "body": "${TM_DIRECTORY/.*Users[\\/\\\\](([^\\/\\\\]*)([\\/\\\\])?)|([\\/\\\\])([^\\/\\\\]*)/$2${3:+.}${5:+.}$5/g}",

所有正斜杠 \\/ 都会转换为替代的正斜杠和反斜杠 [\\/\\\\],其中反斜杠必须显示为 \\\\ 如果您想测试文字 \。哟。

[对于原始问题,只需在开头添加 namespace 即可。]

关于regex - 将路径转换为 ​​VS Code 代码片段中的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54159773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com