相对路径的 VS 代码片段正则表达式

VS Code snippet regex for relative path

我在 Elixir/Phoenix Framework 中使用 VS Code 进行编码并尝试转换以下相对路径

lib/shop_web/live/product_live/index.ex

进入

ShopWeb.Live.ProductLive.Index

使用片段。

最接近的是下面的正则表达式

"${RELATIVE_FILEPATH/^(lib\/|test\/)(\w)|(.ex|.exs)$|\/(\w)|_(\w)/${2:/upcase}${4:/upcase}${5:/upcase}/g}"

谁给我以下输出

ShopWebLiveProductLiveIndex

我找不到插入缺失点的方法。

谁能帮帮我?

提前致谢!

试试这个:

"test7": {
  "prefix": "al",
  "body": [
    // my version
    "${RELATIVE_FILEPATH/^([^\/\\]+[\/\\])|(\.ex|\.exs)$|([^._\/\\]+)|_|([\/\\])/${3:/capitalize}${4:+.}/g}",

    // your version tweaked
    "${RELATIVE_FILEPATH/^(lib[\/\\]|test[\/\\])(\w)|(\.ex|\.exs)$|([\/\\])(\w)|_(\w)/${2:/upcase}${4:+.}${5:/upcase}${6:/upcase}/g}",
  ],
  "description": "alert line"
}

[注意:我为 path.separators /\ 做了这些工作。如果不需要,可以大大缩短代码段。]

您的版本非常接近。我将其更改为 \.ex 只是为了使点明确。

我还在第 5 个捕获组之前添加了第 4 个捕获组 ([\/\\]),如 ([\/\\])(\w)

现在可以在条件 ${4:+.} 中使用第 4 组来添加路径分隔符所在的 .

我的版本稍微短一些 - 它匹配但不使用第一个目录,无论是 lib 还是 test 或其他。如果这对您不起作用,则很容易修改正则表达式的那一部分。我将其缩短为 4 个捕获组。

([^._\/\\]+)|_|([\/\\])我的版本结束:

([^._\/\\]+) :匹配 ._\/
以外的字符 _ :匹配它但我们没有使用它所以不需要捕获组,或者
([\/\\]) : 仅匹配组 4 中的路径分隔符以在条件中使用。

${4:+.} :有条件的,如果有组4(路径分隔符)加一个..

感谢@Mark,我在 Elixir 或 Phoenix Framework 中创建模块的代码片段现在如下所示:

"Module": {
    "prefix": "defmodule",
    "description": "Create a module by the Elixir naming convention",
    "body": [
        "defmodule ${RELATIVE_FILEPATH/^([^\/\\]+[\/\\])|(\.ex|\.exs)$|([^._\/\\]+)|_|([\/\\])/${3:/capitalize}${4:+.}/g} do",
        "\t",
        "end"
    ],
}

作为 naming convention,我的问题 lib/shop_web/live/product_live/index.ex 中文件的输出将是:

defmodule ShopWeb.Live.ProductLive.Index do

end