【发布时间】:2017-03-11 19:26:32
【问题描述】:
我有这样一行代码:
variableInCamelCase <- map["variableInCamelCase"]
我需要这样:
variable_In_Camel_Case <- map["variableInCameCase"]
只有第一个单词必须转换,我正在尝试找到一个正则表达式来做,我需要在 Vim 中做,但我做不到。 像这样的正则表达式:
var rex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g;
"CSVFilesAreCoolButTXT".replace( rex, '$1$4_$2$3$5' );
不好,因为我只需要在第一个单词上做。另外,我需要它用于使用特殊语法捕获组的 VIM。
我试过这样的东西:s/\(\l\)\(\u\)/\1_\2/g,相当于([a-z])([A-Z]),但我不能用([A-Z])([A-Z])([a-z])把它放在OR中
有人为我的问题准备好了 vim 正则表达式吗?也欢迎解释。
【问题讨论】:
-
这是迄今为止我能想到的最好的。不幸的是,它在变量名之后添加了一个尾随
_。我还在想有没有办法解决这个问题。s/\v([A-Z])([A-Z])([a-z])|([a-z])([A-Z])|( .*$)/\1\4_\2\3\5\6/g -
这是一个非常hack的解决方案,但你可以这样做
qq:s/\v^\w{-}\a\zs\u/_&<cr>@qq@q -
Tim Pope 的abolish 可以为您完成。
标签: regex vim camelcasing