【问题标题】:VS Code snippet regex for relative path相对路径的 VS 代码片段正则表达式
【发布时间】:2021-11-07 18:01:04
【问题描述】:

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

lib/shop_web/live/product_live/index.ex

进入

ShopWeb.Live.ProductLive.Index

使用 sn-ps。

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

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

谁给了我以下输出

ShopWebLiveProductLiveIndex

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

谁能帮帮我?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    "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 /\ 做了这些工作。如果不需要,可以将 sn-p 缩短很多。]

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      感谢@Mark,我在 Elixir 或 Phoenix 框架中创建模块的 sn-p 现在看起来像这样:

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

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

      defmodule ShopWeb.Live.ProductLive.Index do
      
      end
      

      【讨论】:

        猜你喜欢
        • 2021-07-12
        • 1970-01-01
        • 2021-02-05
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多