Comment puis-je convertir une chaîne comme «helloThere» ou «HelloThere» en «Hello There» en JavaScript?
javascript
regex
string
HyderA
la source
la source
Réponses:
mettre en majuscule la première lettre - à titre d'exemple.
Notez l'espace dans
" $1"
.EDIT: ajout d'un exemple de capitalisation de la première lettre. Bien sûr, au cas où la première lettre serait déjà en majuscule, vous auriez un espace libre à supprimer.
la source
text.replace
, j'ai complété les appels de fonction avec plus de 2 arguments avec des espaces pour la lisibilité aussiNon-GoogleChrome
?Alternativement en utilisant lodash :
Exemple:
Lodash est une bonne bibliothèque pour donner un raccourci vers de nombreuses tâches quotidiennes de js.Il existe de nombreuses autres fonctions de manipulation de chaînes similaires telles que
camelCase
,kebabCase
etc.la source
hello world
alors la sortie devrait êtreHello There
, Dans ce cas, loadash ne sera pas utile.hello world
enHello World
lodash.com/docs/4.17.15#upperFirsthello there
àhello world
.J'ai eu un problème similaire et je l'ai traité comme ceci:
Pour une solution plus robuste:
http://jsfiddle.net/PeYYQ/
Contribution:
Production:
la source
Exemple sans effets secondaires.
Dans ES6
la source
La meilleure chaîne que j'ai trouvée pour tester les fonctions camel-case-to-title-case est cet exemple ridiculement absurde, qui teste de nombreux cas extrêmes. À ma connaissance, aucune des fonctions précédemment publiées ne gère cela correctement :
PourGetYourGEDInTimeASongAboutThe26ABCsIsOfTheEssenceButAPersonalIDCardForUser456InRoom26AContainingABC26TimesIsNotAsEasyAs123ForC3POOrR2D2Or2R2D
Cela doit être converti en:
Pour obtenir votre GED à temps, une chanson sur les 26 ABC est essentielle, mais une carte d'identité personnelle pour l'utilisateur 456 dans la salle 26A contenant 26 fois ABC n'est pas aussi simple que 123 pour C3PO ou R2D2 ou 2R2D
Si vous voulez juste une fonction simple qui gère des cas comme celui ci-dessus (et plus de cas que la plupart des réponses précédentes), voici celui que j'ai écrit. Ce code n'est ni particulièrement élégant ni rapide, mais il est simple, compréhensible et fonctionne.
Un exemple exécutable en ligne est sur jsfiddle , ou vous pouvez afficher la sortie de l'extrait ci-dessous dans votre console:
la source
Sur la base de l'un des exemples ci-dessus, j'ai trouvé ceci:
Cela fonctionne pour moi car il utilise
.trim()
pour gérer le cas de bord où la première lettre est en majuscule et vous vous retrouvez avec un espace de début supplémentaire.Référence: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
la source
Ok, j'ai quelques années de retard dans le jeu, mais j'avais une question similaire, et je voulais faire une solution de remplacement unique pour chaque entrée possible. Je dois donner l'essentiel du crédit à @ZenMaster dans ce fil et à @Benjamin Udink ten Cate dans ce fil. Voici le code:
Il comporte trois clauses, toutes utilisant lookahead pour empêcher le moteur regex de consommer trop de caractères:
[A-Z](?=[A-Z][a-z])
recherche une lettre majuscule suivie d'une majuscule puis d'une minuscule. Il s'agit de mettre fin aux acronymes comme USA.[^A-Z](?=[A-Z])
recherche une lettre non majuscule suivie d'une majuscule. Cela met fin aux mots comme myWord et aux symboles comme 99Bottles.[a-zA-Z](?=[^a-zA-Z])
recherche une lettre suivie d'une non-lettre. Cela termine les mots avant les symboles comme BFG9000.Cette question était en haut de mes résultats de recherche, alors j'espère pouvoir en faire gagner du temps à d'autres!
la source
Voici ma version de celui-ci. Il ajoute un espace avant chaque lettre anglaise Majuscule qui vient après une lettre anglaise minuscule et met également en majuscule la première lettre si nécessaire:
Par exemple:
thisIsCamelCase -> This Is Camel Case
this IsCamelCase -> This Is Camel Case
thisIsCamelCase123 -> This Is Camel Case123
la source
Cette implémentation prend en compte les lettres majuscules et les chiffres consécutifs.
la source
Vous pouvez utiliser une fonction comme celle-ci:
Code avec un tas de chaînes de test ici: http://jsfiddle.net/jfriend00/FWLuV/ .
Version alternative qui garde les espaces de premier plan ici: http://jsfiddle.net/jfriend00/Uy2ac/ .
la source
" helloWorld"
, par exemple.essayez cette bibliothèque
http://sugarjs.com/api/String/titleize
la source
Aucune des réponses ci-dessus ne fonctionnait parfaitement pour moi, je devais donc venir avec votre propre vélo:
Cas de test:
la source
Cela fonctionne pour moi, vérifiez ceci
la source
string.replace(/([A-Z]+)/g, " $1").replace(/([A-Z][a-z])/g, "$1");
Je pense que cela peut être fait simplement avec l'exp reg
/([a-z]|[A-Z]+)([A-Z])/g
et le remplacement"$1 $2"
.ILoveTheUSADope -> I Love The USA Dope
la source
QWERTY
il retourneQWERT Y
.Si vous traitez avec Capital Camel Case, cet extrait de code peut vous aider, il contient également des spécifications afin que vous puissiez être sûr qu'il correspond à votre cas.
Et spécifications:
la source
Je n'ai pas essayé la réponse de tout le monde, mais les quelques solutions que j'ai bricolées ne correspondaient pas à toutes mes exigences.
J'ai pu trouver quelque chose qui a fait ...
la source
Vous trouverez ci-dessous un lien qui démontre la chaîne de cas de camel en chaîne de phrase en utilisant regex.
Contribution
myCamelCaseSTRINGToSPLITDemo
Production
my Camel Case STRING To SPLIT Demo
Ceci est regex pour la conversion de la casse de chameau en texte de phrase
avec
$1 $2
comme subsitution.Cliquez pour voir la conversion sur regex
la source
Entrée javaScript
Script Java de sortie
la source
Encore une solution basée sur RegEx.
Explication
Le RegEx ci-dessus se compose de deux parties similaires séparées par l' opérateur OR . La première moitié:
([A-Z])
- correspond aux lettres majuscules ...(?=[A-Z][a-z])
- suivi d'une séquence de lettres majuscules et minuscules.Lorsqu'il est appliqué à la séquence FOo , cela correspond effectivement à sa lettre F.
Ou le deuxième scénario:
([a-z])
- correspond aux lettres minuscules ...(?=[A-Z])
- suivi d'une lettre majuscule.Lorsqu'il est appliqué à la séquence barFoo , cela correspond effectivement à sa lettre r .
Lorsque tous les candidats de remplacement ont été trouvés, la dernière chose à faire est de les remplacer par la même lettre mais par un espace supplémentaire. Pour cela, nous pouvons utiliser
'$& '
comme remplacement, et cela se résoudra en une sous-chaîne correspondante suivie d'un caractère espace.Exemple
la source
Ajout d'une autre solution ES6 que j'aimais mieux après ne pas être satisfait de quelques réflexions ci-dessus.
https://codepen.io/902Labs/pen/mxdxRv?editors=0010#0
la source