J'ai une chaîne "MySites"
. Je veux placer un espace entre My
et Sites
.
Comment puis-je le faire dans jQuery ou JavaScript?
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()
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');
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)
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(); })
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") );
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());
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 .