Как я могу преобразовать из подчеркивания в случай верблюда с регулярным выражением?
Как я могу преобразовать имена с подчеркиванием в имена верблюдов следующим образом, используя поиск и замену одного регулярного выражения Java/Perl?
underscore_variable_name -> underscoreVariableName
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName
_LEADING_UNDERSCORE -> leadingUnderscore
Причина, по которой я запрашиваю единичные регулярные выражения, заключается в том, что я хочу сделать это с помощью поиска и замены Eclipse или Notepad++.
3 ответа
Решение
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
Если в строке уже есть переменные camelCase, то ответ @Qtax сделает их строчными. Если все ваши переменные в нижнем регистре under_scored, то вы можете внести следующие изменения в # 3: W
-> A-Z
's/(?<=[^\A-Z_])_+([^\A-Z_])|([^\A-Z_]+)|_+/\U$1\L$2/g'
Я предпочитаю ответ user846969, но каким-то образом он не нашел других совпадений в инструменте, использующем EBNF (расширенная форма Бэкуса-Наура). Вот что сработало для меня:
/(?:([a-z0-9]*)[_-])([a-z])/${1}${2:/upcase}/g