Wie konvertiere ich CamelCase in Snake_Case?

Lesezeit: 3 Minuten

Badruls Benutzeravatar
Badrul

Ich möchte mit TypeScript eine Zeichenfolge in Kamel-Schreibweise in Schlangen-Schreibweise konvertieren.

Denken Sie daran, dass sich die „Schlangenschreibweise“ auf den Formatstil bezieht, bei dem jedes Leerzeichen durch einen Unterstrich (_) ersetzt und der erste Buchstabe jedes Wortes in Kleinbuchstaben geschrieben wird.

Beispiel: fieldName Zu field_name sollte eine gültige Konvertierung sein, aber FieldName Zu Field_Name ist ungültig.

  • Was hast du versucht? Ich würde zunächst einen regulären Ausdruck verwenden, um ihn durch einen Großbuchstaben zu teilen.

    – Jeff

    18. Januar 2019 um 1:12


  • Mögliches Duplikat der Javascript-Konvertierung von PascalCase in underscore_case

    – Chris

    18. Januar 2019 um 1:13

  • Java ist für Javascript wie Pain für Painting oder Ham für Hamster. Sie sind völlig unterschiedlich. Angehenden Programmierern wird dringend empfohlen, den Namen der Sprache zu lernen, in der sie Code schreiben möchten. Wenn Sie eine Frage posten, kennzeichnen Sie sie bitte entsprechend.

    – Bestimmte Leistung

    18. Januar 2019 um 1:13

const camelToSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);

  • Es funktioniert nicht, wenn ich das obere Kamelgehäuse zum Schlangengehäuse verwende. ItemName=_item_name

    – Badrul

    24. Januar 2019 um 8:33


  • @Badrul, aber das ist eher PascalCase

    – Lukas

    14. Mai 2019 um 13:26 Uhr

  • 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. März 2020 um 15:05 Uhr


  • Diese Version funktioniert auch für obere Kamelgehäuse str.replace(/[A-Z]/g, (letter, index) => { return index == 0 ? letter.toLowerCase() : '_'+ letter.toLowerCase();});

    – Hrishi

    2. Juni 2021 um 10:03 Uhr


  • Meine Variante funktioniert gut mit dem ersten Großbuchstaben: text.split(/(?=[A-Z])/).join('_').toLowerCase()

    – Evseev Vadim

    5. November 2021 um 14:55 Uhr

Sie könnten so etwas tun:

function camelToUnderscore(key) {
   var result = key.replace( /([A-Z])/g, " $1" );
   return result.split(' ').join('_').toLowerCase();
}

console.log(camelToUnderscore('itemName'));

  • Leicht modifizierte Version des Codes: var result = (value .replace(/[^A-Za-z0-9_]/G, ‘‘) .ersetzen(/([A-Z]+)/g, ” $1″) .replace(/\s+/g, ‘ ‘) .trim() .toLowerCase() .replace(/\s/g, ‘‘)); if (/^\d/.test(result)) { result = “x” + result; }

    – abasar

    13. September 2020 um 8:20 Uhr


  • @abasar, was ist der Vorteil deiner leicht modifizierten Version?

    – run_the_race

    7. September 2022 um 7:32 Uhr

Benutzeravatar von Amats
Amats

Versuche dies:

function toSnakeCase(inputString) {
    return inputString.split('').map((character) => {
        if (character == character.toUpperCase()) {
            return '_' + character.toLowerCase();
        } else {
            return character;
        }
    })
    .join('');
}
// x = item_name

  • Danke! Das ist super hilfreich. Für mich habe ich auch eine Prüfung hinzugefügt, um sicherzustellen, dass die neue Zeichenfolge nicht mit einem Unterstrich beginnt, indem ich Ihren ersetzt habe '_' mit (index != 0 ? '_': '') und Hinzufügen eines Index als Parameter zur Kartenfunktion ...map((character, index) => {...

    – Moralkodex

    2. August 2020 um 22:42 Uhr

  • Ich habe auch die Antwort unter stackoverflow.com/a/55521416 verwendet, um dieser Funktion eine Prüfung auf alphabetische Zeichen hinzuzufügen, damit Zahlen und Symbole (die nach der Umwandlung in Großbuchstaben dasselbe Zeichen sind) nicht dazu führen, dass diese Funktion immer wieder verdoppelt mAnzahl der Unterstriche, wenn ein Snake_case-String übergeben wird. Dies hat jedoch auch den Nachteil, dass die Eingabe nur auf den hartcodierten Zeichensatz beschränkt wird

    – Moralkodex

    2. August 2020 um 23:07 Uhr


Benutzeravatar von Raj Saraogi
Raj Saraogi

Ich habe die folgende Funktion getestet und bearbeite die meisten meiner Fälle

    function convertToSnakeCase(str) {
      str = str[0].toLowerCase() + str.slice(1, str.length).replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
      str  = str.replaceAll(" _","_")

      return str.replaceAll(" ","_").replace(/(^_*|_*$)/g, '');;
   }

Testfälle bearbeitet

convertToSnakeCase("Payas AsdDs asD")
'payas_asd_ds_as_d'

convertToSnakeCase("Payas AsdDs")
'payas_asd_ds'

convertToSnakeCase("Pay  AsdDs")
'pay__asd_ds'

convertToSnakeCase('test_') 
'test';

Die akzeptierte Antwort führt mit einem _ wenn das erste Zeichen ein Großbuchstabe ist. Dies löst das Problem.

 export function camelToSnake(string = '') {
  return (string || '')
    .replace(/([A-Z])/g, (match, group) => `_${group.toLowerCase()}`)
    .replace(/^_/, '')
}

  • Ich denke, Sie müssen nicht auf die Standardeinstellung zurückgreifen '' zweimal.

    – Cadoiz

    22. Mai um 14:17 Uhr

Cary Shindells Benutzeravatar
Cary Shindell

Wenn Sie bereit sind, externe Bibliotheken zu verwenden, ist die Verwendung von Lodashs möglicherweise der einfachste Weg _.snakeCase(string)

  • Ich denke, Sie müssen nicht auf die Standardeinstellung zurückgreifen '' zweimal.

    – Cadoiz

    22. Mai um 14:17 Uhr

1454040cookie-checkWie konvertiere ich CamelCase in Snake_Case?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy