kebab - javascript camelcase to dash
Javascript convierte PascalCase en underscore_case (5)
¿Cómo puedo convertir la cadena PascalCase
en una cadena underscore_case
? Necesito conversión de puntos para subrayar también.
p.ej. convertir
TypeOfData.AlphaBeta
dentro
type_of_data_alpha_beta
Alternativamente usando lodash :
lodash.snakeCase(str);
Ejemplo:
_.snakeCase(''TypeOfData.AlphaBeta'');
// ➜ ''type_of_data_alpha_beta''
Lodash es una excelente biblioteca para dar acceso directo a muchas tareas cotidianas de js. Hay muchas otras funciones similares de manipulación de cadenas, como camelCase
, kebabCase
, etc.
Esto te llevará bastante lejos: https://github.com/domchristie/humps
Probablemente tengas que usar regex replace para reemplazar el "." con un guion bajo
Puedes probar los siguientes pasos.
Capture todas las letras mayúsculas y también coincida con el carácter de punto opcional anterior.
Luego convierta las letras mayúsculas capturadas a minúsculas y luego regrese para reemplazar la función con un
_
como carácter precedente. Esto se logrará mediante el uso de la función anónima en la pieza de repuesto.Esto reemplazaría la letra mayúscula inicial a
_
+ letra minúscula.Finalmente, eliminar el subrayado inicial le dará el resultado deseado.
var s = ''TypeOfData.AlphaBeta''; console.log(s.replace(/(?:^|/.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
O
var s = ''TypeOfData.AlphaBeta'';
alert(s.replace(//.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
cualquier forma de detenerlo cuando una palabra completa está en mayúsculas. p.ej.
MotorRPM
enMotorRPM
en lugar demotor_r_p_m
? oBatteryAAA
enBatteryAAA
en lugar debattery_a_a_a
?
var s = ''MotorRMP'';
alert(s.replace(//.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
function toCamelCase(s) {
// remove all characters that should not be in a variable name
// as well underscores an numbers from the beginning of the string
s = s.replace(/([^a-zA-Z0-9_/- ])|^[_0-9]+/g, "").trim().toLowerCase();
// uppercase letters preceeded by a hyphen or a space
s = s.replace(/([ -]+)([a-zA-Z0-9])/g, function(a,b,c) {
return c.toUpperCase();
});
// uppercase letters following numbers
s = s.replace(/([0-9]+)([a-zA-Z])/g, function(a,b,c) {
return b + c.toUpperCase();
});
return s;
}
Prueba esta función, espero que ayude.
str.split(/(?=[A-Z])/).join(''_'').toLowerCase();
de nada
var s1 = ''someTextHere'';
var s2 = ''SomeTextHere'';
var o1 = s1.split(/(?=[A-Z])/).join(''_'').toLowerCase();
var o2 = s2.split(/(?=[A-Z])/).join(''_'').toLowerCase();
console.log(o1);
console.log(o2);