如何使用正则表达式将下划线转换为驼峰?

时间:2012-03-12 15:14:32

标签: regex pcre case-conversion

如何使用单个 Java / Perl正则表达式搜索和替换,将具有下划线的名称转换为驼峰案例名称?

underscore_variable_name -> underscoreVariableName
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName
_LEADING_UNDERSCORE -> leadingUnderscore

我要求单个正则表达式的原因是我想使用Eclipse或Notepad ++搜索并替换它。

4 个答案:

答案 0 :(得分:24)

Some Perl examples

my $str = 'variable_name, VARIABLE_NAME, _var_x_short,  __variable__name___';

### solution 1
$_ = $str;

$_ = lc;
s/_(\w)/\U$1/g;

say;

### solution 2: multi/leading underscore fix
$_ = $str;

$_ = lc;
s/(?<=[^\W_])_+([^\W_])|_+/\U$1/g;

say;

### solution 3: without prior lc
$_ = $str;

s/(?<=[^\W_])_+([^\W_])|([^\W_]+)|_+/\U$1\L$2/g;

say;

输出:

variableName, variableName, VarXShort,  _variable_name__
variableName, variableName, varXShort,  variableName
variableName, variableName, varXShort,  variableName

答案 1 :(得分:2)

如果你已经在字符串中有camelCase变量,那么@ Qtax的答案将使它们小写。如果您的所有变量都是小写的under_scored,那么您可以对#3进行以下修改:W - &gt; A-Z

's/(?<=[^\A-Z_])_+([^\A-Z_])|([^\A-Z_]+)|_+/\U$1\L$2/g'

答案 2 :(得分:2)

_-:

之后的大写字母
s/[_-]([a-z])/\u$1/gr

答案 3 :(得分:1)

我更喜欢user846969的答案,但是不知何故,它在使用EBNF(扩展的Backus-Naur形式)的工具中找不到其他匹配项。这是对我有用的东西:

/(?:([a-z0-9]*)[_-])([a-z])/${1}${2:/upcase}/g