Javascript konvertiert PascalCase in underscore_case/snake_case

Lesezeit: 4 Minuten

Benutzer-Avatar
zahmati

Wie kann ich konvertieren PascalCase Schnur hinein underscore_case/snake_case Schnur? Ich muss auch Punkte in Unterstriche umwandeln.

z.B. Konvertieren

TypeOfData.AlphaBeta

hinein

type_of_data_alpha_beta

Benutzer-Avatar
Avinash Raj

Sie können die folgenden Schritte ausprobieren.

  • Erfassen Sie alle Großbuchstaben und passen Sie auch das vorangehende optionale Punktzeichen an.

  • Konvertieren Sie dann die erfassten Großbuchstaben in Kleinbuchstaben und kehren Sie dann zurück, um die Funktion durch an zu ersetzen _ als vorangestelltes Zeichen. Dies wird durch die Verwendung der anonymen Funktion im Ersatzteil erreicht.

  • Dies würde den beginnenden Großbuchstaben to ersetzen _ + Kleinbuchstabe.

  • Wenn Sie schließlich den beginnenden Unterstrich entfernen, erhalten Sie die gewünschte Ausgabe.

    var s="TypeOfData.AlphaBeta";
    console.log(s.replace(/(?:^|\.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
    

ODER

var s="TypeOfData.AlphaBeta";
alert(s.replace(/\.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

eine Möglichkeit, es zu stoppen, wenn ein ganzes Wort in Großbuchstaben geschrieben ist. z.B. MotorRPM hinein motor_rpm Anstatt von motor_r_p_m? oder BatteryAAA hinein battery_aaa Anstatt von battery_a_a_a?

var s="MotorRMP";
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

  • Danke, jede Möglichkeit, es zu stoppen, wenn ein ganzes Wort in Großbuchstaben geschrieben ist. z.B. MotorRMP hinein motor_rpm Anstatt von motor_r_p_m? oder BatteryAAA hinein battery_aaa Anstatt von battery_a_a_a.

    – zahmati

    29. Mai 2015 um 4:58 Uhr


  • alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

    – Avinash Raj

    29. Mai 2015 um 5:00 Uhr

  • Die obigen Lösungen schlagen mit “attributeGUILabel” fehl, das in “attribute_gui_label” konvertiert werden sollte.

    – Scott P.

    4. Juli 2019 um 22:33 Uhr

  • Ich habe eine Lösung gefunden, die funktioniert. Siehe meine Antwort unten

    – Scott P.

    5. Juli 2019 um 0:33 Uhr

  • Am liebsten ohne Rückruf s.replace(/\.?([A-Z]+)/g, '_$1').toLowerCase().replace(/^_/, "")

    – l00k

    1. August 2019 um 14:30 Uhr


Benutzer-Avatar
cojack

str.split(/\.?(?=[A-Z])/).join('_').toLowerCase();

bitte

var s1 = 'someTextHere';
var s2 = 'SomeTextHere';
var s3 = 'TypeOfData.AlphaBeta';

var o1 = s1.split(/\.?(?=[A-Z])/).join('_').toLowerCase();
var o2 = s2.split(/\.?(?=[A-Z])/).join('_').toLowerCase();
var o3 = s3.split(/\.?(?=[A-Z])/).join('_').toLowerCase();

console.log(o1);
console.log(o2);
console.log(o3);

  • Es funktioniert nicht mit ‘ IrgendeinTextHier’ wegen der führenden Leerzeichen. Hinzufügen eines trim Vor dem split löst es.

    – Maurer

    30. August 2019 um 6:11 Uhr


Alternativ verwenden Lodash:

lodash.snakeCase(str);

Beispiel:

_.snakeCase('TypeOfData.AlphaBeta');
// ➜ 'type_of_data_alpha_beta'

Lodash ist eine feine Bibliothek, um viele alltägliche js-Aufgaben abzukürzen. Es gibt viele andere ähnliche String-Manipulationsfunktionen wie z camelCase, kebabCase usw.

  • Wow, danke dafür, ich habe mein eigenes toSnakeCase, toTitleCase(_.startCase), toCamelCase verwendet. Dank dessen bin ich jetzt auf Lodash umgestiegen und es funktioniert viel besser als bei mir! Ich hatte keine Ahnung, dass Lodash das hat!

    – Noitidart

    13. Februar 2018 um 18:32 Uhr


  • Auch danke! Ich benutze Lodash jeden Tag und wusste nicht, dass es das kann!

    – ludacris2k4

    13. Februar 2021 um 0:52 Uhr

Benutzer-Avatar
Höllehausen

"alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma

Problem – Muss eine Camel-Case-Zeichenfolge (z. B. einen Eigenschaftsnamen) in einen Unterstrich umwandeln, um Schnittstellenanforderungen zu erfüllen oder für die Metaprogrammierung.

Erläuterung
Diese Zeile verwendet eine Funktion von regulären Ausdrücken, bei der sie ein übereinstimmendes Ergebnis zurückgeben kann (das erste Paar von () ist $1zweite ist $2etc ).

Jede Übereinstimmung in der Zeichenfolge wird so konvertiert, dass ihr ein Unterstrich vorangestellt wird _$1 Zeichenfolge bereitgestellt. An diesem Punkt sieht die Zeichenfolge aus wie alpha_Beta_Gamma.

Um die Groß-/Kleinschreibung zu korrigieren, wird der gesamte String in LowerCase() umgewandelt.

Da toLowerCase eine ziemlich teure Operation ist, ist es am besten, sie nicht für jeden Match-Case in den Looping-Handler zu stecken und sie einmal auf der gesamten Zeichenfolge auszuführen.

Nach toLowerCase es ist die resultierende Zeichenfolge alpha_beta_gamma (in diesem Beispiel)

Damit kommst du ziemlich weit: https://github.com/domchristie/humps

Sie müssen wahrscheinlich Regex-Ersetzung verwenden, um das “.” mit einem Unterstrich.

Benutzer-Avatar
Ahmed Chaled

Ich habe das gefunden, aber ich habe es so bearbeitet, dass es zu Ihrer Frage passt.

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

Benutzer-Avatar
Viktor Ivlijew

Gute Beispiele für js:

  1. Schlangenfall
  2. Kebab-Fall
  3. Kamelfall
  4. Fall Pascal

haben hier

1146380cookie-checkJavascript konvertiert PascalCase in underscore_case/snake_case

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

Privacy policy