Badrul
Quiero convertir una cadena que está en caso de camello a caso de serpiente usando TypeScript.
Recuerde que el “caso de la serpiente” se refiere al estilo de formato en el que cada espacio se reemplaza por un carácter de subrayado (_) y la primera letra de cada palabra se escribe en minúsculas.
Ejemplo: fieldName
a field_name
debería ser una conversión válida, pero FieldName
a Field_Name
no es válido.
const camelToSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
-
No funciona cuando utilicé la caja de camello superior a la caja de serpiente.
ItemName
=_item_name
– Badrul
24 de enero de 2019 a las 8:33
-
@Badrul, sin embargo, eso es más PascalCase
– Lucas
14 mayo 2019 a las 13:26
-
ItemName => item_name:
const camel_to_snake = str => str[0].toLowerCase() + str.slice(1, str.length).replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
– e382df99a7950919789725ceeec126
30 de marzo de 2020 a las 15:05
-
Esta versión también funciona para mayúsculas y minúsculas.
str.replace(/[A-Z]/g, (letter, index) => { return index == 0 ? letter.toLowerCase() : '_'+ letter.toLowerCase();});
– Hrishi
2 de junio de 2021 a las 10:03
-
mi variante funciona bien con la primera letra mayúscula:
text.split(/(?=[A-Z])/).join('_').toLowerCase()
–Evseev Vadim
5 de noviembre de 2021 a las 14:55
Podrías hacer algo como esto:
function camelToUnderscore(key) {
var result = key.replace( /([A-Z])/g, " $1" );
return result.split(' ').join('_').toLowerCase();
}
console.log(camelToUnderscore('itemName'));
-
Versión ligeramente modificada del código: var result = (value .replace(/[^A-Za-z0-9_]/g, ‘‘) .reemplazar(/([A-Z]+)/g, ” $1″) .replace(/\s+/g, ‘ ‘) .trim() .toLowerCase() .replace(/\s/g, ‘‘)); if (/^\d/.test(resultado)) { resultado = “x” + resultado; }
– abasar
13 de septiembre de 2020 a las 8:20
-
@abasar ¿cuál es la ventaja de su versión ligeramente modificada?
– correr_la_carrera
7 sep a las 7:32
Amats
Prueba esto:
function toSnakeCase(inputString) {
return inputString.split('').map((character) => {
if (character == character.toUpperCase()) {
return '_' + character.toLowerCase();
} else {
return character;
}
})
.join('');
}
// x = item_name
-
vas a necesitar volver a unirte a la matriz
– usuario578895
18 de enero de 2019 a las 1:17
-
@MarkKahn Lo olvidé. ¡Gracias!
– Amats
18 de enero de 2019 a las 2:10
-
¡Gracias! Esto es muy útil. para mí, también agregué una verificación para garantizar que la nueva cadena no comience con un guión bajo al reemplazar su
'_'
con(index != 0 ? '_': '')
y agregando índice como parámetro a la función de mapa...map((character, index) => {...
– Código moral
2 de agosto de 2020 a las 22:42
-
También usé la respuesta en stackoverflow.com/a/55521416 para agregar una verificación de caracteres alfabéticos a esta función para que los números y símbolos (que son el mismo carácter después de ponerlos en mayúsculas) no hagan que esta función siga duplicando el mNúmero de guiones bajos cuando se pasa una cadena Snake_Case. Sin embargo, esto también tiene el defecto de limitar la entrada solo al conjunto de caracteres codificados.
– Código moral
2 de agosto de 2020 a las 23:07
que has probado Para empezar, usaría una expresión regular para dividir por una letra mayúscula.
– Jeff
18 de enero de 2019 a las 1:12
Posible duplicado de Javascript convertir PascalCase a underscore_case
– Chris
18 de enero de 2019 a las 1:13
Java es a Javascript como Pain es a Painting, o Ham a Hamster. Son completamente diferentes. Se recomienda encarecidamente que los aspirantes a programadores intenten aprender el nombre del idioma en el que intentan escribir el código. Cuando publique una pregunta, etiquétela adecuadamente.
– Cierto rendimiento
18 de enero de 2019 a las 1:13