Search code examples
regexpcrecamelcasingcase-conversion

How can I convert from underscores to camel case with a regex?


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.


Solution

  • 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;
    

    Output:

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