Sublime Text 片段将 camelCase 转换为 snake_case
Sublime Text snippet convert camelCase to snake_case
你好,我正在尝试制作一个精美的文本片段,我想
将驼峰式单词转换为 snake_case。我知道有一些插件可以让你将字符串转换为 snake_case,但我想通过 sublime 文本片段来完成。
我有如下片段。
<snippet>
<content><![CDATA[
/**
* ${TM_FILEPATH/^.+\/(\w+)\.php$//} belongs to many (many-to-many) ${1/^((.+)ies)|(.+[^s])s$/\u(?1y:)/}.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function ()
{
return $this->belongsToMany('App\${1/^((.+)ies)|(.+[^s])s$/\u(?1y:)/}', '${TM_FILEPATH/^.+\/(\w+)\.php$/\l/}_', '${TM_FILEPATH/^.+\/(\w+)\.php$/\l/}_id', '${1/^((.+)ies)|(.+[^s])s$/\l(?1y:)/}_id');
}
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<tabTrigger>btm</tabTrigger>
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<scope>source.php</scope>
<description>Eloquent belongsToMany() (pivot) relation</description>
</snippet>
作为输出,它给了我。
/**
* UserMessages belongs to many (many-to-many) Role.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function roles()
{
return $this->belongsToMany('App\Role', 'userMessages_roles', 'userMessages_id', 'role_id');
}
我最终想要的是 userMessages user_messages。
知道如何实现它。
非常感谢。
Perl 提供 \L
修饰符以在替换时小写捕获。
捕获在括号 () 中,可以通过 $1、$2 等进行反向引用
所以只需要找到一个小写字符,然后是一个大写字符,然后大写字符应该是小写的。
sub camel_case_to_underscore {
my $method_name = shift;
$method_name =~s /([a-z])([A-Z])/_\L/g;
return lcfirst $method_name;
}
g
标志全局替换,因此字符串中的所有出现。
请注意,此函数也将字符串的第一个字母小写,
我想这就是你想要的。
下面是一个执行类似操作的代码片段的示例,它基于您的示例,但为了清楚起见而缩短了(我还将范围更改为 embedding.php
因此它会触发我使用的语法对于 PHP)。您应该能够在较大的代码段示例中根据您的需要进行调整。
<snippet>
<content><![CDATA[
// ${1/^([A-Z])|(?:([A-Z]))/(?1\l:)(?2_\l:)/g}
public function ()
{
[=10=]
}
]]></content>
<tabTrigger>btm</tabTrigger>
<scope>embedding.php</scope>
<description>Eloquent belongsToMany() (pivot) relation</description>
</snippet>
这个基础可以看snippets page in the unofficial documentation. The expansion of a variable in a snippet takes the form ${variable/regex/format_string/options}
. The regex uses the boost library regular expressions and format strings.
Boost 支持 (?Ntrue:false)
形式的条件替换,其中对于捕获组 N
,如果匹配捕获了某些内容,则替换文本为 true
,如果匹配捕获了某些内容,则替换文本为 false
没有。
这里我们在正则表达式中使用交替来获得两个捕获组,这样我们就可以根据匹配的项目提供两个不同的替换。第一个捕获组捕获前导大写字符并将其转换为小写,而第二个捕获组(未锚定到行的开头)执行相同的操作并且还在匹配项前面加上下划线。
你好,我正在尝试制作一个精美的文本片段,我想 将驼峰式单词转换为 snake_case。我知道有一些插件可以让你将字符串转换为 snake_case,但我想通过 sublime 文本片段来完成。
我有如下片段。
<snippet>
<content><![CDATA[
/**
* ${TM_FILEPATH/^.+\/(\w+)\.php$//} belongs to many (many-to-many) ${1/^((.+)ies)|(.+[^s])s$/\u(?1y:)/}.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function ()
{
return $this->belongsToMany('App\${1/^((.+)ies)|(.+[^s])s$/\u(?1y:)/}', '${TM_FILEPATH/^.+\/(\w+)\.php$/\l/}_', '${TM_FILEPATH/^.+\/(\w+)\.php$/\l/}_id', '${1/^((.+)ies)|(.+[^s])s$/\l(?1y:)/}_id');
}
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<tabTrigger>btm</tabTrigger>
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<scope>source.php</scope>
<description>Eloquent belongsToMany() (pivot) relation</description>
</snippet>
作为输出,它给了我。
/**
* UserMessages belongs to many (many-to-many) Role.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function roles()
{
return $this->belongsToMany('App\Role', 'userMessages_roles', 'userMessages_id', 'role_id');
}
我最终想要的是 userMessages user_messages。 知道如何实现它。
非常感谢。
Perl 提供 \L
修饰符以在替换时小写捕获。
捕获在括号 () 中,可以通过 $1、$2 等进行反向引用
所以只需要找到一个小写字符,然后是一个大写字符,然后大写字符应该是小写的。
sub camel_case_to_underscore {
my $method_name = shift;
$method_name =~s /([a-z])([A-Z])/_\L/g;
return lcfirst $method_name;
}
g
标志全局替换,因此字符串中的所有出现。
请注意,此函数也将字符串的第一个字母小写, 我想这就是你想要的。
下面是一个执行类似操作的代码片段的示例,它基于您的示例,但为了清楚起见而缩短了(我还将范围更改为 embedding.php
因此它会触发我使用的语法对于 PHP)。您应该能够在较大的代码段示例中根据您的需要进行调整。
<snippet>
<content><![CDATA[
// ${1/^([A-Z])|(?:([A-Z]))/(?1\l:)(?2_\l:)/g}
public function ()
{
[=10=]
}
]]></content>
<tabTrigger>btm</tabTrigger>
<scope>embedding.php</scope>
<description>Eloquent belongsToMany() (pivot) relation</description>
</snippet>
这个基础可以看snippets page in the unofficial documentation. The expansion of a variable in a snippet takes the form ${variable/regex/format_string/options}
. The regex uses the boost library regular expressions and format strings.
Boost 支持 (?Ntrue:false)
形式的条件替换,其中对于捕获组 N
,如果匹配捕获了某些内容,则替换文本为 true
,如果匹配捕获了某些内容,则替换文本为 false
没有。
这里我们在正则表达式中使用交替来获得两个捕获组,这样我们就可以根据匹配的项目提供两个不同的替换。第一个捕获组捕获前导大写字符并将其转换为小写,而第二个捕获组(未锚定到行的开头)执行相同的操作并且还在匹配项前面加上下划线。