Reputation: 28188
How can I convert names with underscores into camel case names as follows using a single Java/Perl regular expression search and replace?
underscore_variable_name -> underscoreVariableName
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName
_LEADING_UNDERSCORE -> leadingUnderscore
The reason I ask for a single regular expressions is that I want to do this using Eclipse or Notepad++ search and replace.
Upvotes: 30
Views: 32748
Reputation: 2795
I prefer user846969's answer but somehow it was not finding other matches in the tool that is using EBNF (extended Backus-Naur form). Here is somthing that worked for me:
/(?:([a-z0-9]*)[_-])([a-z])/${1}${2:/upcase}/g
Upvotes: 2
Reputation: 586
If you already have camelCase variables in the string, then @Qtax's answer will make them lowercase. If all of your variables are lower-case under_scored then you can make the following modification to #3: W
--> A-Z
's/(?<=[^\A-Z_])_+([^\A-Z_])|([^\A-Z_]+)|_+/\U$1\L$2/g'
Upvotes: 2
Reputation: 33908
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;
Output:
variableName, variableName, VarXShort, _variable_name__
variableName, variableName, varXShort, variableName
variableName, variableName, varXShort, variableName
Upvotes: 31