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
javascript
string
case-conversion
zahmati
quelle
quelle
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(/^_/, ""));
var s = 'MotorRMP'; alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
quelle
MotorRMP
inmotor_rpm
stattmotor_r_p_m
? oderBatteryAAA
inbattery_aaa
stattbattery_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);
quelle
trim
vor demsplit
löst es.Alternativ mit lodash :
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.quelle
"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 ausalpha_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 Zeichenfolgealpha_beta_gamma
(in diesem Beispiel)quelle
Diese Lösung löst das nicht nachlaufende Akronymproblem mit den oben genannten Lösungen
Ich habe den Code in 1175208 von Python nach JavaScript portiert .
Javascript Code
function camelToSnakeCase(text) { return text.replace(/(.)([A-Z][a-z]+)/, '$1_$2').replace(/([a-z0-9])([A-Z])/, '$1_$2').toLowerCase() }
Arbeitsbeispiele:
camelToSnakeCase('thisISDifficult') -> this_is_difficult camelToSnakeCase('thisISNT') -> this_isnt camelToSnakeCase('somethingEasyLikeThis') -> something_easy_like_this
quelle
Damit kommen Sie ziemlich weit: https://github.com/domchristie/humps
Sie müssen wahrscheinlich Regex Replace verwenden, um das "." mit einem Unterstrich.
quelle
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.
quelle
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.
quelle
Ich fand dies aber ich bearbeiten es so Ihre Frage entspricht.
const camelToSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`).replace(/^_/,'')
quelle