Comment puis-je convertir une chaîne en cas de camel en utilisant javascript regex?
EquipmentClass name
ou
Equipment className
ou equipment class name
ouEquipment Class Name
devraient tous devenir: equipmentClassName
.
javascript
regex
camelcasing
Scott Klarenbach
la source
la source
Réponses:
En regardant votre code, vous pouvez y parvenir avec seulement deux
replace
appels:Edit: Ou avec un seul
replace
appel, en capturant les espaces blancs également dans leRegExp
.la source
camelize("Let's Do It!") === "let'SDoIt!"
visage triste . Je vais essayer moi-même mais je crains d'ajouter un autre remplacement.return this.replace(/[^a-z ]/ig, '').replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,
...const toCamelCase = (str) => str.replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
.toLowerCase()
méthode dans. Par exemple. en utilisant la solution de @ tabrindle ci-dessus:const toCamelCase = (str) => str.toLowerCase().replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
Si quelqu'un utilise lodash , il y a un
_.camelCase()
fonction.la source
J'ai juste fini par faire ça:
J'essayais d'éviter d'enchaîner plusieurs instructions de remplacement. Quelque chose où j'aurais 1 $, 2 $, 3 $ dans ma fonction. Mais ce type de regroupement est difficile à comprendre, et votre mention des problèmes entre navigateurs est quelque chose auquel je n'ai jamais pensé non plus.
la source
this.valueOf()
au lieu de passerstr
. Alternativement (comme dans mon cas)this.toLowerCase()
car mes chaînes d'entrée étaient en MAJUSCULES qui n'avaient pas les parties non bosse correctement minuscules. L'utilisationthis
renvoie simplement l'objet string lui-même, qui est en fait un tableau de char, d'où le TypeError mentionné ci-dessus.Vous pouvez utiliser cette solution:
la source
toCamelCase
fonction fait juste cela.ES5
ES6
Remarque:
pour ces langues avec des accents. Inclure
À-ÖØ-öø-ÿ
avec l'expression régulière comme suit.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g
la source
https://stackoverflow.com/posts/52551910/revisions
ES6, je ne l'ai pas testé. Je vais vérifier et mettre à jour.Dans le cas spécifique de Scott, j'irais avec quelque chose comme:
L'expression régulière correspondra au premier caractère s'il commence par une majuscule, et tout caractère alphabétique après un espace, c'est-à-dire 2 ou 3 fois dans les chaînes spécifiées.
En piquant le regex,
/^([A-Z])|[\s-_](\w)/g
cela camélisera également les noms de type de trait d'union et de soulignement.la source
+
) au groupe de caractères, c'est-à-dire:/^([A-Z])|[\s-_]+(\w)/g
J'essayais de trouver une fonction JavaScript dans
camelCase
une chaîne et je voulais m'assurer que les caractères spéciaux seraient supprimés (et j'avais du mal à comprendre ce que faisaient certaines des réponses ci-dessus). Ceci est basé sur la réponse de cc young, avec des commentaires ajoutés et la suppression des caractères $ peci & l.la source
Exemple fiable et fonctionnel que j'utilise depuis des années:
Caractères qui changent de casse:
-
_
.
la source
Si l'expression régulière n'est pas requise, vous voudrez peut-être consulter le code suivant que j'ai créé il y a longtemps pour Twinkle :
Je n'ai fait aucun test de performance, et les versions de regexp pourraient ou non être plus rapides.
la source
Mon approche ES6 :
la source
la source
lodash peut bien sûr faire l'affaire:
Bien qu'il
lodash
puisse s'agir d'une "grande" bibliothèque (~ 4 Ko), elle contient de nombreuses fonctions pour lesquelles vous utiliseriez normalement un extrait de code ou que vous construirez vous-même.la source
Voici une seule ligne qui fait le travail:
Il divise la chaîne en minuscules en fonction de la liste de caractères fournie dans RegExp
[.\-_\s]
(ajoutez-en plus dans le []!) Et renvoie un tableau de mots. Ensuite, il réduit le tableau de chaînes à une chaîne de mots concaténée avec les premières lettres majuscules. Comme la réduction n'a pas de valeur initiale, elle commencera à mettre les premières lettres en majuscules en commençant par le deuxième mot.Si vous voulez PascalCase, ajoutez simplement une chaîne vide initiale
,'')
à la méthode de réduction.la source
en suivant l'approche lisible de @ Scott, un peu de réglage fin
la source
réponse peu modifiée de Scott:
maintenant, il remplace «-» et «_» aussi.
la source
Les 14 permutations ci-dessous produisent le même résultat de "EquipmentClassName".
la source
vous pouvez utiliser cette solution:
la source
Parce que cette question nécessitait encore une autre réponse ...
J'ai essayé plusieurs des solutions précédentes, et toutes avaient un défaut ou un autre. Certains n'ont pas supprimé la ponctuation; certains ne traitaient pas les cas avec des nombres; certains ne géraient pas plusieurs ponctuations d'affilée.
Aucun d'entre eux n'a géré une chaîne comme
a1 2b
. Il n'y a pas de convention explicitement définie pour ce cas, mais d'autres questions de stackoverflow suggéraient de séparer les nombres par un trait de soulignement.Je doute que ce soit la réponse la plus performante (trois regex passent par la chaîne, plutôt qu'un ou deux), mais elle passe tous les tests auxquels je peux penser. Pour être honnête, cependant, je ne peux vraiment pas imaginer un cas où vous effectuez autant de conversions de cas de chameau que les performances seraient importantes.
(J'ai ajouté ceci en tant que package npm . Il comprend également un paramètre booléen facultatif pour renvoyer Pascal Case au lieu de Camel Case.)
Cas de test (Jest)
la source
Voici ma solution:
la source
Cette méthode semble surpasser la plupart des réponses ici, c'est un peu hacky cependant, pas de remplacement, pas de regex, construisant simplement une nouvelle chaîne qui est camelCase.
la source
Cela s'appuie sur la réponse du CMS en supprimant tous les caractères non alphabétiques, y compris les traits de soulignement, ce
\w
qui ne supprime pas.la source
Cas de chameau supérieur ("TestString") à cas de chameau inférieur ("testString") sans utiliser de regex (avouons-le, regex est mauvais):
la source
J'ai fini par créer une solution légèrement plus agressive:
Celui-ci, ci-dessus, supprimera tous les caractères non alphanumériques et les parties minuscules des mots qui autrement resteraient en majuscules, par exemple
Size (comparative)
=>sizeComparative
GDP (official exchange rate)
=>gdpOfficialExchangeRate
hello
=>hello
la source
la source
Voici ma suggestion:
ou
Cas de test:
la source
Je sais que c'est une vieille réponse, mais cela gère à la fois les espaces et _ (lodash)
la source
"
en.replace(/_/g", " ")
ce que provoque des erreurs de compilation?la source
EDIT : fonctionne maintenant dans IE8 sans modifications.
EDIT : J'étais dans la minorité de ce qu'est réellement camelCase (caractère principal en minuscules vs majuscules.). La communauté dans son ensemble pense qu'une des majuscules est le cas du chameau et le cas du pascal. J'ai créé deux fonctions qui utilisent uniquement des modèles regex. :) Nous utilisons donc un vocabulaire unifié. J'ai changé ma position pour correspondre à la majorité.
Tout ce dont je pense avoir besoin, c'est d'une seule expression régulière dans les deux cas:
ou
Dans les fonctions: Vous remarquerez que dans ces fonctions, le remplacement échange tout non az avec un espace contre une chaîne vide. Il s'agit de créer des limites de mots pour la capitalisation. "bonjour-MON # monde" -> "HelloMyWorld"
Remarques:
Prendre plaisir
la source
Je pense que cela devrait fonctionner.
la source
N'utilisez pas String.prototype.toCamelCase () car String.prototypes sont en lecture seule, la plupart des compilateurs js vous donneront cet avertissement.
Comme moi, ceux qui savent que la chaîne ne contiendra toujours qu'un seul espace peuvent utiliser une approche plus simple:
Bonne journée. :)
la source