Comment puis-je convertir PascalCase
chaîne en underscore_case
chaîne? J'ai besoin de la conversion de points à souligner également.
par exemple. convertir
TypeOfData.AlphaBeta
dans
type_of_data_alpha_beta
Vous pouvez essayer les étapes ci-dessous.
Capturez toutes les lettres majuscules et faites également correspondre le caractère de point optionnel précédent.
Puis convertissez les lettres majuscules capturées en minuscules, puis revenez pour remplacer function par un _
comme caractère précédent. Ceci sera réalisé en utilisant une fonction anonyme dans la pièce de rechange.
Ceci remplacerait la lettre majuscule de départ par _
+ lettre minuscule.
Enfin, supprimer le soulignement de départ vous donnera le résultat souhaité.
var s = 'TypeOfData.AlphaBeta';
console.log(s.replace(/(?:^|\.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
OU
var s = 'TypeOfData.AlphaBeta';
alert(s.replace(/\.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
aucun moyen de l'arrêter quand une Parole entière est en majuscule. par exemple.
MotorRPM
dansmotor_rpm
au lieu demotor_r_p_m
? ouBatteryAAA
dansbattery_aaa
au lieu debattery_a_a_a
?
var s = 'MotorRMP';
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
str.split(/(?=[A-Z])/).join('_').toLowerCase();
de rien
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);
Vous pouvez également utiliser lodash :
lodash.snakeCase(str);
Exemple:
_.snakeCase('TypeOfData.AlphaBeta');
// ➜ 'type_of_data_alpha_beta'
Lodash est une excellente bibliothèque pour donner des raccourcis à de nombreuses tâches js quotidiennes. Il existe de nombreuses autres fonctions de manipulation de chaînes similaires telles que camelCase
, kebabCase
etc.
"alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma
Problème - Nécessité de convertir une chaîne de chameaux (telle qu'un nom de propriété) en style de soulignement pour répondre aux exigences de l'interface ou pour la méta-programmation.
Explanation Cette ligne utilise une fonctionnalité d'expressions régulières dans laquelle elle peut renvoyer un résultat correspondant (la première paire de () est $1
, la seconde est $2
, etc ).
Chaque correspondance de la chaîne est convertie pour avoir un trait de soulignement devant elle avec _$1
chaîne fournie. À ce stade, la chaîne ressemble à alpha_Beta_Gamma
.
Pour corriger la casse, la chaîne entière est convertie en LowerCase ().
Comme toLowerCase est une opération assez coûteuse, il est préférable de ne pas le placer dans le gestionnaire de bouclage pour chaque cas de match et de l'exécuter une fois sur toute la chaîne.
Après toLowerCase
la chaîne résultante est alpha_beta_gamma
_ (dans cet exemple)
J'ai porté le code dans 1175208 de Python en JavaScript.
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
Cela vous mènera assez loin: https://github.com/domchristie/humps
Vous devrez probablement utiliser regex replace pour remplacer le "." avec un soulignement.
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;
}
Essayez cette fonction en espérant que cela vous aidera.
"TestString".replace(/[A-Z]/g, val => "_" + val.toLowerCase()).replace(/^_/,"")
remplace toutes les majuscules par des caractères de soulignement et des minuscules, puis supprime le soulignement de base.