Eu tenho uma corda "MySites"
. Eu quero colocar um espaço entre My
e Sites
.
Como posso fazer isso em jQuery ou JavaScript?
Eu tenho uma corda "MySites"
. Eu quero colocar um espaço entre My
e Sites
.
Como posso fazer isso em jQuery ou JavaScript?
Respostas:
Você pode simplesmente adicionar um espaço antes de cada caractere maiúsculo e cortar os espaços à esquerda e à direita
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. O + fará com que você combine o maior número possível de letras maiúsculas consecutivas.
Isso encontrará cada ocorrência de um caractere minúsculo seguido por um caractere maiúsculo e inserirá um espaço entre eles:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Para casos especiais quando ocorrem 2 letras maiúsculas consecutivas (Ex: ThisIsATest), adicione o código adicional abaixo:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
Posso sugerir uma pequena edição na resposta atualmente aceita:
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;
}
Isso significa que:
ACROText -> ACRO Text
UserNameTest -> User Name Test
O que pode ser um pouco mais útil se você estiver lidando com nomes de coluna db (e estiver usando acrônimos para algumas coisas)
Isso deve inserir um espaço entre cada letra maiúscula que não foi precedida por uma letra maiúscula.
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
terá o valor que você deseja. Além disso, se quiser encurtar seu código usando regex, você pode usar o seguinte código de Javascript camelCase para o formato regular
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
regex para encontrar minúsculas - limite de maiúsculas e inserir um espaço
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
Aqui está o que acabei usando para converter uma string em uma caixa de título, com base em algumas das respostas aqui:
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')
Aqui está um JSFiddle onde você pode testar sua string para ver se ela atende às suas necessidades: https://jsfiddle.net/thomastasa/5236dv8t/85/
Exemplos:
Você pode usar String#split()
e um look-ahead para o alfabeto em maiúsculas ( [A-Z]
) e Array#join()
a matriz com um espaço:
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
Ou, como uma função String Object:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());
Em uma única regex substituir (sem cortes ou junções) que permite qualquer caractere, não apenas letras [a-z]
ou [A-Z]
.
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
Você pode verificar mais sobre o look behind (?<!^)
aqui .