使用正则表达式语法转换将文件路径转换为 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 组匹配,也将 ::
添加到替换项中。
我试着改变这个(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 组匹配,也将::
添加到替换项中。