Wie kann ich einen PascalCaseString in einen underscore_caseString konvertieren ? Ich muss auch Punkte in Unterstriche umwandeln.
z.B. Konvertieren
TypeOfData.AlphaBeta
in
type_of_data_alpha_beta
Wie kann ich einen PascalCaseString in einen underscore_caseString 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.
MotorRPMinmotor_rpmstattmotor_r_p_m? oderBatteryAAAinbattery_aaastattbattery_a_a_a?
var s = 'MotorRMP';
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
MotorRMPin motor_rpmstatt motor_r_p_m? oder BatteryAAAin battery_aaastatt 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);
trimvor dem splitlö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, kebabCaseusw.
"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 $2usw.).
Jede Übereinstimmung in der Zeichenfolge wird so konvertiert, dass ein Unterstrich mit der _$1bereitgestellten 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 toLowerCaseist 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.
CamelToUnderscorewird 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(/^_/,'')