J'ai une chaîne "MySites"
. Je veux placer un espace entre My
y Sites
.
Comment puis-je faire cela en jQuery ou en JavaScript ?
J'ai une chaîne "MySites"
. Je veux placer un espace entre My
y Sites
.
Comment puis-je faire cela en jQuery ou en JavaScript ?
Il "échoue" pour les acronymes, comment pourrions-nous l'empêcher d'agir lorsque 2 ou plus de caps consécutifs ?
@ToniMichelCaubet facile, modifiez la regex comme ceci : /([A-Z]+)/g
. Le + s'assurera que vous faites correspondre autant de lettres majuscules consécutives que possible.
Cette opération 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 spéciaux où 2 lettres majuscules consécutives apparaissent (par exemple : ThisIsATest), ajoutez le code supplémentaire ci-dessous :
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
Juste un avertissement, cela échoue pour les lettres simples "ThisIsATest" résultera en "This Is ATest".
@Ceres : Bon point. Ce cas pourrait être traité en insérant un espace avant toute majuscule qui n'est pas le premier caractère, mais il reste des cas qui ne peuvent pas être traités sans reconnaissance de mots, comme par exemple "RunThisSQLQuery"
.
Pour le "ThisIsATest" --(sans compter le "RunThisSQLQuery") vous pourriez faire ceci : str.replace(/([A-Z])/g, ' $1').trim()
Puis-je suggérer une légère modification de la réponse actuellement acceptée ?
function insertSpaces(string) {
string = string.replace(/([a-z])([A-Z])/g, '$1 $2');
string = string.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
return string;
}
Cela signifie que :
ACROText -> ACRO Text
UserNameTest -> User Name Test
Ce qui pourrait être légèrement plus utile si vous avez affaire à des noms de colonnes de la base de données (et si vous utilisez des acronymes pour certaines choses).
Cela devrait permettre d'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];
}
newString
aura la valeur que vous souhaitez. De plus, si vous voulez raccourcir votre code en utilisant le regex, vous pouvez utiliser le code suivant à partir de Javascript camelCase à la forme régulière
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Pouvez-vous nous donner plus de détails ? Quelle est la forme générale des chaînes de caractères que vous voulez séparer ? S'il ne s'agit que d'une seule chaîne, pourquoi ne pas simplement insérer l'espace manuellement ?
2 votes
Soyez plus précis, je ne pense pas que quiconque puisse comprendre ce que vous demandez.
1 votes
Définir le motif qu'il doit rechercher, par exemple "un espace lorsqu'il trouve 'Mon' dans la chaîne" ou "ajouter un espace avant chaque caractère majuscule, sauf s'il s'agit du premier caractère", ou....
0 votes
"entre MySites". Comment pouvez-vous placer un espace entre 1 chose ? Je suppose que vous voulez "Mes sites" comme sortie.
0 votes
meagar -- beau commentaire (sarcasme). on ne vous a jamais appris que si vous n'avez rien de gentil à dire, ne dites rien du tout ?