2012-03-12 9 views
15

¿Cómo puedo convertir nombres con caracteres de subrayado en nombres de camello de la siguiente manera utilizando solo Búsqueda de expresiones regulares Java/Perl y reemplazar?¿Cómo puedo convertir desde guiones bajos a camello con una expresión regular?

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

La razón que pido para una sola expresiones regulares es que yo quiero hacer esto usando Eclipse o Notepad ++ búsqueda y reemplazar.

Respuesta

20

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; 

Salida:

variableName, variableName, VarXShort, _variable_name__ 
variableName, variableName, varXShort, variableName 
variableName, variableName, varXShort, variableName 
+0

+1: Neat. La única objeción posible es que '_tea_break' se convertiría en' TeaBreak' en lugar de 'teaBreak' o' _teaBreak'. Pero eso serviría a alguien correcto para usar nombres que comiencen con un guión bajo. –

+0

@JonathanLeffler, tienes razón, y también habría problemas si se usaran múltiples guiones bajos consecutivos. Actualizado la respuesta para arreglar eso. – Qtax

+1

Gracias, pero como esto es para usar en los cuadros de diálogo de búsqueda y reemplazo del editor, estaba pidiendo que lo hiciera con una sola expresión regular. '$ _ = lc' rompe esta restricción. ¿Puedes pensar en una forma de combinarlos? –

2

Si ya tiene las variables camelCase en la cadena, y la respuesta de @ Qtax les hará minúsculas. Si todas las variables son minúsculas under_scored entonces puede hacer la siguiente modificación a # 3: W ->A-Z letras

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

las mayúsculas siguientes: _-

s/[_-]([a-z])/\u$1/gr 
Cuestiones relacionadas