相对路径的 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
我在 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