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
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
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
hineinmotor_rpm
Anstatt vonmotor_r_p_m
? oderBatteryAAA
hineinbattery_aaa
Anstatt vonbattery_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
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
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 $1
zweite ist $2
etc ).
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.
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(/^_/,'')
Viktor Ivlijew
Probieren Sie diesen Link-Kumpel aus, er hilft Ihnen sicher jamesroberts.name/blog/2010/02/22/…
– Santhucool
29. Mai 2015 um 4:44 Uhr