Pouvez-vous fournir plus de détails? Quelle est la forme générale des chaînes que vous souhaitez séparer? S'il ne s'agit que de cette seule chaîne, pourquoi ne pas simplement mettre l'espace manuellement?
Pointy le
2
S'il vous plaît être plus précis, je ne pense pas que quiconque puisse comprendre ce que vous demandez
Clement Herreman
1
définir le modèle auquel il doit correspondre, par exemple "un espace quand il trouve 'My' dans la chaîne" ou "ajouter un espace avant chaque caractère majuscule, à moins qu'il ne s'agisse du premier caractère", ou ....
JohnSmith
"entre MySites". Comment pouvez-vous placer un espace entre 1 chose? Je suppose que vous voulez "Mes sites" comme sortie.
Rocket Hazmat
#meagar - joli commentaire (sarcasme). N'avez-vous jamais appris que si vous n'avez rien de gentil à dire, ne dites rien du tout
carinlynchin
Réponses:
166
Vous pouvez simplement ajouter un espace avant chaque caractère majuscule et couper les espaces de début et de fin
Cela fonctionne également pour "1AndAbove". L'autre solution ne l'est pas. Merci!!
desaivv
1
Il «échoue» pour les acronymes, comment pourrions-nous l'empêcher d'agir lorsque 2 ou plusieurs caps consécutifs?
Toni Michel Caubet
4
@ToniMichelCaubet facile, modifier l'expression régulière comme ceci: /([A-Z]+)/g. Le + s'assurera que vous faites correspondre autant de lettres majuscules consécutives que possible.
iFreilicht
Pourquoi les parenthèses que vous utilisez pour entourer «[AZ]» sont-elles nécessaires dans ce code?
Kristina Bressler
@Kristina La parenthèse dit «Je suis une variable». Sans les parenthèses, cela donne la réponse '$ 1y $ 1ites' pour 'MySites'
user2051552
128
Cela trouvera chaque occurrence d'un caractère minuscule suivi d'un caractère majuscule, et insérera un espace entre eux:
s = s.replace(/([a-z])([A-Z])/g,'$1 $2');
Pour les cas particuliers où 2 majuscules consécutives apparaissent (par exemple: ThisIsATest), ajoutez un code supplémentaire ci-dessous:
Juste un avertissement, cela échoue pour les lettres simples "ThisIsATest" entraînera "This Is ATest".
Ceres
3
@Ceres: Bon point. Ce cas pourrait être traité en insérant à la place un espace avant toute majuscule qui n'est pas le premier caractère, mais vous avez toujours des cas qui ne peuvent pas être traités sans reconnaissance de mot, comme "RunThisSQLQuery".
Guffa
1
pour le "ThisIsATest" - (sans compter le 'RunThisSQLQuery') vous pouvez faire ceci: str.replace (/ ([AZ]) / g, '$ 1'). trim ()
carinlynchin
Brillant! Merci!
Ami Schreiber
21
Puis-je suggérer une légère modification de la réponse actuellement acceptée:
Cela fonctionne parfaitement pour ce dont j'avais besoin. Il a parfaitement ajouté un espace entre les lettres majuscules mais a gardé les acronymes ensemble.
mighty_mite
6
Cela devrait insérer un espace entre chaque lettre majuscule qui n'a pas été précédée d'une lettre majuscule.
var myString ="MySites"var newString ="";var wasUpper =false;for(var i =0; i < myString.length; i++){if(!wasUpper && myString[i]== myString.toUpperCase()[i]){
newString = newString +" ";
wasUpper =true;}else{
wasUpper =false;}
newString = newString + myString[i];}
newStringaura la valeur que vous souhaitez. De plus, si vous souhaitez raccourcir votre code à l'aide de regex, vous pouvez utiliser le code suivant de Javascript camelCase à Regular Form
"thisStringIsGood"// insert a space before all caps.replace(/([A-Z])/g,' $1')// uppercase the first character.replace(/^./,function(str){return str.toUpperCase();})
Dans une seule expression régulière, remplacez (sans découpes ni jointures) qui autorise n'importe quel caractère, pas seulement des lettres [a-z]ou[A-Z] .
const str ="MySites";
str.replace(/(?<!^)([A-Z])/," $1");// -> "My Sites"
Vous pouvez en savoir plus sur le look derrière (?<!^)ici .
Réponses:
Vous pouvez simplement ajouter un espace avant chaque caractère majuscule et couper les espaces de début et de fin
la source
/([A-Z]+)/g
. Le + s'assurera que vous faites correspondre autant de lettres majuscules consécutives que possible.Cela trouvera chaque occurrence d'un caractère minuscule suivi d'un caractère majuscule, et insérera un espace entre eux:
Pour les cas particuliers où 2 majuscules consécutives apparaissent (par exemple: ThisIsATest), ajoutez un code supplémentaire ci-dessous:
la source
"RunThisSQLQuery"
.Puis-je suggérer une légère modification de la réponse actuellement acceptée:
Cela signifie que:
Ce qui pourrait être un peu plus utile si vous avez affaire à des noms de colonnes db (et que vous utilisez des acronymes pour certaines choses)
la source
Cela devrait insérer un espace entre chaque lettre majuscule qui n'a pas été précédée d'une lettre majuscule.
newString
aura la valeur que vous souhaitez. De plus, si vous souhaitez raccourcir votre code à l'aide de regex, vous pouvez utiliser le code suivant de Javascript camelCase à Regular Formla source
regex pour trouver les minuscules - limite des majuscules puis insérer un espace
http://jsfiddle.net/uXy64/
la source
Voici ce que j'ai fini par utiliser pour convertir une chaîne en cas de titre, en fonction de quelques-unes des réponses ici:
Voici un JSFiddle où vous pouvez tester votre chaîne pour voir si cela répond à vos besoins: https://jsfiddle.net/thomastasa/5236dv8t/85/
Exemples:
la source
Vous pouvez utiliser
String#split()
et une anticipation de l'alphabet en majuscule ([A-Z]
), puisArray#join()
du tableau avec un espace:Ou, en tant que fonction d'objet chaîne:
la source
Dans une seule expression régulière, remplacez (sans découpes ni jointures) qui autorise n'importe quel caractère, pas seulement des lettres
[a-z]
ou[A-Z]
.Vous pouvez en savoir plus sur le look derrière
(?<!^)
ici .la source