Wie kann ich einen PascalCase
String in einen underscore_case
String konvertieren ? Ich muss auch Punkte in Unterstriche umwandeln.
z.B. Konvertieren
TypeOfData.AlphaBeta
in
type_of_data_alpha_beta
Wie kann ich einen PascalCase
String in einen underscore_case
String konvertieren ? Ich muss auch Punkte in Unterstriche umwandeln.
z.B. Konvertieren
TypeOfData.AlphaBeta
in
type_of_data_alpha_beta
Antworten:
Sie können die folgenden Schritte ausprobieren.
Erfassen Sie alle Großbuchstaben und stimmen Sie auch mit dem vorhergehenden optionalen Punktzeichen überein.
Konvertieren Sie dann die erfassten Großbuchstaben in Kleinbuchstaben und kehren Sie zurück, um die Funktion durch ein _
Vorgängerzeichen zu ersetzen . Dies wird durch die Verwendung einer anonymen Funktion im Ersatzteil erreicht.
Dies würde den Anfangsbuchstaben in Großbuchstaben an _
+ Kleinbuchstaben ersetzen .
Wenn Sie den Start-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(/^_/, ""));
jede Möglichkeit, es zu stoppen, wenn ein ganzes Wort in Großbuchstaben geschrieben ist. z.B.
MotorRPM
inmotor_rpm
stattmotor_r_p_m
? oderBatteryAAA
inbattery_aaa
stattbattery_a_a_a
?
var s = 'MotorRMP';
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
MotorRMP
in motor_rpm
statt motor_r_p_m
? oder BatteryAAA
in battery_aaa
statt battery_a_a_a
.
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
s.replace(/\.?([A-Z]+)/g, '_$1').toLowerCase().replace(/^_/, "")
str.split(/(?=[A-Z])/).join('_').toLowerCase();
bitte
var s1 = 'someTextHere';
var s2 = 'SomeTextHere';
var o1 = s1.split(/(?=[A-Z])/).join('_').toLowerCase();
var o2 = s2.split(/(?=[A-Z])/).join('_').toLowerCase();
console.log(o1);
console.log(o2);
trim
vor dem split
löst es.
Alternativ mit lodash :
lodash.snakeCase(str);
Beispiel:
_.snakeCase('TypeOfData.AlphaBeta');
// ➜ 'type_of_data_alpha_beta'
Lodash ist eine feine Bibliothek Verknüpfung zu vielen alltäglichen js tasks.There sind viele andere ähnliche String - Manipulation Funktionen zu geben , wie zum Beispiel camelCase
, kebabCase
usw.
"alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma
Problem - Sie müssen eine Camel-Case-Zeichenfolge (z. B. einen Eigenschaftsnamen) in einen Unterstrich konvertieren, um die Schnittstellenanforderungen zu erfüllen, oder für die Metaprogrammierung.
Erläuterung
Diese Zeile verwendet eine Funktion regulärer Ausdrücke, mit der ein übereinstimmendes Ergebnis zurückgegeben werden kann (erstes Paar von () ist $1
, zweites ist $2
usw.).
Jede Übereinstimmung in der Zeichenfolge wird so konvertiert, dass ein Unterstrich mit der _$1
bereitgestellten Zeichenfolge vorangestellt wird. An diesem Punkt sieht die Zeichenfolge so aus alpha_Beta_Gamma
.
Um die Großschreibung zu korrigieren, wird die gesamte Zeichenfolge in LowCase () konvertiert.
Da toLowerCase eine ziemlich teure Operation ist, ist es am besten, sie nicht für jeden Match-Case in den Loop-Handler zu legen und sie einmal für die gesamte Zeichenfolge auszuführen.
Danach toLowerCase
ist die resultierende Zeichenfolge alpha_beta_gamma
(in diesem Beispiel)
Ich habe den Code in 1175208 von Python nach JavaScript portiert .
function camelToSnakeCase(text) {
return text.replace(/(.)([A-Z][a-z]+)/, '$1_$2').replace(/([a-z0-9])([A-Z])/, '$1_$2').toLowerCase()
}
camelToSnakeCase('thisISDifficult') -> this_is_difficult
camelToSnakeCase('thisISNT') -> this_isnt
camelToSnakeCase('somethingEasyLikeThis') -> something_easy_like_this
Damit kommen Sie ziemlich weit: https://github.com/domchristie/humps
Sie müssen wahrscheinlich Regex Replace verwenden, um das "." mit einem Unterstrich.
function toCamelCase(s) {
// remove all characters that should not be in a variable name
// as well underscores an numbers from the beginning of the string
s = s.replace(/([^a-zA-Z0-9_\- ])|^[_0-9]+/g, "").trim().toLowerCase();
// uppercase letters preceeded by a hyphen or a space
s = s.replace(/([ -]+)([a-zA-Z0-9])/g, function(a,b,c) {
return c.toUpperCase();
});
// uppercase letters following numbers
s = s.replace(/([0-9]+)([a-zA-Z])/g, function(a,b,c) {
return b + c.toUpperCase();
});
return s;
}
Probieren Sie diese Funktion aus und hoffen Sie, dass sie hilft.
CamelToUnderscore
wird gebraucht.
"TestString".replace(/[A-Z]/g, val => "_" + val.toLowerCase()).replace(/^_/,"")
Ersetzt alle Großbuchstaben durch einen Unterstrich und Kleinbuchstaben und entfernt dann den führenden Unterstrich.
Ich fand dies aber ich bearbeiten es so Ihre Frage entspricht.
const camelToSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`).replace(/^_/,'')