使用正则表达式语法转换将文件路径转换为 ​​Ruby 嵌套 Class

Transfom file path into Ruby nested Class using regex syntax transform

我试着改变这个(VSCode RELATIVE_FILEPATH 变量):

app/service/namespace/important_thing/my_class.rb

进入这个:

Namespace::ImportantThing::MyClass

到目前为止我得到了什么:

RELATIVE_FILEPATH/(?:\/?app\/\w+)?(\/|_)(.(?!\w+?\.rb))/::${2:/upcase}/g}:

但效果并不好

::Namespace::Importand::Thing/my_class.rb

我这样做是为了给自己创建一个片段,但这个正则表达式对我来说有点太多了。

我在 Sublime 中使用过类似的东西,但是它是用 python 中的一些代码完成的,所以不能从那里引用。

你可以使用

"${RELATIVE_FILEPATH/^(?:.*?[\\\/])?app[\\\/]\w+[\\\/]|([^\\\/]+?)(?:\.rb$|([\\\/]))/${1:/pascalcase}${2:+::}/g}"

参见regex demo详情:

  • ^(?:.*?[\\/])?app[\\/]\w+[\\/] - 字符串的开头,除换行字符外的任何零个或多个字符尽可能少,然后是 \/,然后是 app , 一个 \/, 一个或多个字符, \/
  • | - 或
  • ([^\\/]+?) - 第 1 组:\/ 以外的一个或多个字符尽可能少
  • (?:\.rb$|([\\/])) - 匹配字符串末尾 .rb\ / /(捕获到第 2 组)的非捕获组。

替换为${1:/pascalcase}${2:+::}:

  • ${1:/pascalcase} - 将第 1 组的匹配替换为 PasCal 大小写
  • ${2:+::} - 如果第 2 组匹配,也将 :: 添加到替换项中。