26

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

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

我要求使用单个正则表达式的原因是我想使用 Eclipse 或 Notepad++ 搜索和替换来执行此操作。

4

4 回答 4

28

一些 Perl 示例

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
于 2012-03-12T15:35:15.687 回答
4

_- 后面的大写字母:

s/[_-]([a-z])/\u$1/gr
于 2013-09-10T12:29:46.497 回答
2

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

's/(?<=[^\A-Z_])_+([^\A-Z_])|([^\A-Z_]+)|_+/\U$1\L$2/g'
于 2013-06-07T15:24:44.370 回答
1

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

/(?:([a-z0-9]*)[_-])([a-z])/${1}${2:/upcase}/g
于 2020-05-13T11:10:20.887 回答