web-dev-qa-db-fra.com

Insérer un espace avant les majuscules

J'ai une chaîne "MySites". Je veux placer un espace entre My et Sites.

Comment puis-je le faire dans jQuery ou JavaScript?

82
CLiown

Vous pouvez simplement ajouter un espace avant chaque caractère en majuscule et couper les espaces de début et de fin

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

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 spéciaux où 2 majuscules consécutives se produisent (par exemple: ThisIsATest), ajoutez un code supplémentaire ci-dessous:

 s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
120
Guffa

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 traitez avec des noms de colonnes db (et utilisez des acronymes pour certaines choses)

17
JosephGarrone

Cela doit insérer un espace entre chaque lettre majuscule qui n'a pas été précédé 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 souhaitée. De plus, si vous souhaitez raccourcir votre code en utilisant l'expression régulière, vous pouvez utiliser le code suivant de Javascript camelCase to Regular Form

"thisStringIsGood"
    // insert a space before all caps
    .replace(/([A-Z])/g, ' $1')
    // uppercase the first character
    .replace(/^./, function(str){ return str.toUpperCase(); })
6
Devin Burke

expression régulière pour trouver des minuscules - limite des majuscules 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/

5
Adam Straughan

Vous pouvez utiliser String#split() et une anticipation pour l'alphabet en majuscule ([A-Z]) Puis Array#join() le tableau avec un espace:

let stringCamelCase = "MySites";

let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");

console.log(string)

Ou, en tant que fonction d'objet chaîne:

String.prototype.cC2SC = function() {
  return this.split(/(?=[A-Z])/).join(" ");
}

console.log("MyCamelCase".cC2SC());
1
Luca Kiebel

Dans un seul regex remplacer (sans rognages ni jointures) qui permet à n'importe quel caractère et pas seulement aux lettres [a-z] ou [A-Z].

const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"

Vous pouvez en savoir plus sur l'apparence derrière (?<!^)ici .

0
Jose Da Silva