J'ai une ficelle "MySites"
. Je veux placer un espace entre My
et Sites
.
Comment puis-je faire cela dans jQuery ou JavaScript?
J'ai une ficelle "MySites"
. Je veux placer un espace entre My
et Sites
.
Comment puis-je faire cela dans jQuery ou JavaScript?
Réponses:
Vous pouvez simplement ajouter un espace avant chaque caractère majuscule et couper les espaces de début et de fin
s = s.replace(/([A-Z])/g, ' $1').trim()
/([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:
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:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
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 un peu plus utile si vous avez affaire à des noms de colonnes db (et que vous utilisez des acronymes pour certaines choses)
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];
}
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 Form
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
regex pour trouver les 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") );
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:
str = str
.replace(/(_|-)/g, ' ')
.trim()
.replace(/\w\S*/g, function(str) {
return str.charAt(0).toUpperCase() + str.substr(1)
})
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
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:
Vous pouvez utiliser String#split()
et une anticipation de l'alphabet en majuscule ( [A-Z]
), puis Array#join()
du 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 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 .