相对路径的VS程式码片段regex

ogq8wdun  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(150)

我正在Elixir/Phoenix框架中使用VS代码进行编码,并尝试转换以下相对路径

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

我找不到插入缺失点的方法。
有人能帮我吗?
提前感谢!

bjp0bcyl

bjp0bcyl1#

试试这个:

"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"
}

[Note:我为两个路径.分隔符/\都做了这些工作。如果你不需要,你可以大大缩短代码片段。]
你的版本非常接近。我把它改成\\.ex只是为了让点更清晰。
我还在第5个捕获组之前添加了第4个捕获组([\\/\\\\]),如([\\/\\\\])(\\w)
现在,第4组可以在条件${4:+.}中使用,以在路径分隔符所在的位置添加.
我的版本稍短-它匹配但不使用任何目录是第一个,无论是libtest或任何。如果这对你不起作用,很容易修改regexp的位。我缩短为4捕获组。
([^._\\/\\\\]+)|_|([\\/\\\\])我的版本结束:
([^._\\/\\\\]+):匹配除._\/以外的字符,或
_:匹配它,但我们不使用它,因此不需要捕获组,或者
([\\/\\\\]):只匹配要在条件中使用的组4中的路径分隔符。
${4:+.}:条件,如果存在组4(路径分隔符),则添加.

eqqqjvef

eqqqjvef2#

感谢@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$1",
        "end"
    ],
}

按照命名约定,我的问题lib/shop_web/live/product_live/index.ex中的文件的输出将是:

defmodule ShopWeb.Live.ProductLive.Index do

end

相关问题