150 votes

Insérer un espace avant les lettres majuscules

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 ?

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....

271voto

user2051552 Points 46

Il suffit d'ajouter un espace avant chaque caractère majuscule et de supprimer les espaces avant et arrière.

s = s.replace(/([A-Z])/g, ' $1').trim()

0 votes

Cela fonctionne également pour "1AndAbove". L'autre solution ne fonctionne pas. Merci !

2 votes

Il "échoue" pour les acronymes, comment pourrions-nous l'empêcher d'agir lorsque 2 ou plus de caps consécutifs ?

9 votes

@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.

149voto

Guffa Points 308133

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');

4 votes

Juste un avertissement, cela échoue pour les lettres simples "ThisIsATest" résultera en "This Is ATest".

4 votes

@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" .

1 votes

Pour le "ThisIsATest" --(sans compter le "RunThisSQLQuery") vous pourriez faire ceci : str.replace(/([A-Z])/g, ' $1').trim()

37voto

Asryael Points 1124

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).

4 votes

Cela fonctionne parfaitement pour ce dont j'avais besoin. Il ajoute parfaitement un espace entre les majuscules tout en gardant les acronymes ensemble.

8voto

Justin Satyr Points 7510

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(); })

5voto

Adam Straughan Points 1519

Regex pour trouver la limite minuscule - majuscule puis insérer un espace

<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );

http://jsfiddle.net/uXy64/

Prograide.com

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.

Powered by:

X