¿Cómo convertir camelcase a snake case en Javascript? [closed]

3 minutos de lectura

Avatar de usuario de Badrul
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.

  • 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

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

Avatar de usuario de Amats
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


¿Ha sido útil esta solución?