如何使用camelcase文件名?

时间:2014-04-05 01:34:57

标签: regex vim

我正在尝试修改cla代码段,但也失败了。

这是片段

snippet cla class .. end
class ${1:`substitute(Filename(), '^.', '\u&', '')`}
    ${2}

自动获取文件名并将其转换为

 this_is_filename.rb =>  This_is_filename

我对它不满意。我宁愿想要它

this_is_filename.rb => ThisIsFilename

怎么做?

2 个答案:

答案 0 :(得分:3)

这会将文件名转换为camelCase

substitute(Filename(), '_\(.\)', '\U\1', 'g')

但是看起来你想要PascalCase。这适用于PascalCase

substitute(Filename(), '\%(^\|_\)\(.\)', '\U\1', 'g')

答案 1 :(得分:0)

不确定您使用的是哪种语言,但(?:\A|_)(\w)会捕获第一个字母以及_后跟一个字母。但是,只有字母(在字符串的开头或_之后)才会出现在匹配组中。这意味着使用字符串this_is_filename.rb,您将匹配t(组1:t),_i(组1:i)和{{1 (第1组:_f)。然后,您可以将匹配替换为第一组的大写版本。很抱歉我缺少一个更好的例子,但在PHP中你可以这样做:

f

此表达式的工作原理是捕获字符串的开头(echo preg_replace_callback( '/(?:\A|_)(\w)/', function($matches) { return strtoupper($matches[1]); }, 'this_is_filename.rb' ); )或非捕获组中的下划线,然后是包含在其中的“单词”字符(\A)。第一场比赛组。这样你可以用第一个匹配组的大写版本替换下划线和字符。