Tengo una cuerda "MySites"
. Quiero colocar un espacio entre My
y Sites
.
¿Cómo puedo hacer esto en jQuery o JavaScript?
Tengo una cuerda "MySites"
. Quiero colocar un espacio entre My
y Sites
.
¿Cómo puedo hacer esto en jQuery o JavaScript?
Respuestas:
Puede simplemente agregar un espacio antes de cada carácter en mayúscula y recortar los espacios iniciales y finales
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. El + asegurará que coincida con tantas letras mayúsculas consecutivas como sea posible.
Esto encontrará cada aparición de un carácter en minúscula seguido de un carácter en mayúscula e insertará un espacio entre ellos:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Para casos especiales cuando aparecen 2 letras mayúsculas consecutivas (por ejemplo: ThisIsATest), agregue código adicional a continuación:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
¿Puedo sugerir una ligera modificación a la respuesta actualmente aceptada:
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;
}
Esto significa que:
ACROText -> ACRO Text
UserNameTest -> User Name Test
Lo que podría ser un poco más útil si se trata de nombres de columnas de base de datos (y utiliza siglas para algunas cosas)
Esto debe insertar un espacio entre cada letra mayúscula que no esté precedido por una letra mayú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
tendrá el valor que desee. Además, si desea acortar su código usando expresiones regulares, puede usar el siguiente código de Javascript camelCase a 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 para encontrar minúsculas - límite de mayúsculas y luego inserte un espacio
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
Esto es lo que terminé usando para convertir una cadena en un caso de título, según algunas de las respuestas aquí:
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')
Aquí hay un JSFiddle donde puede probar su cadena para ver si satisface sus necesidades: https://jsfiddle.net/thomastasa/5236dv8t/85/
Ejemplos:
Puede usar String#split()
y un avance para el alfabeto en mayúscula ( [A-Z]
) y luego Array#join()
la matriz con un espacio:
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
O, como una función de objeto de cadena:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());
En una sola expresión regular, reemplace (sin recortes ni uniones) que permite cualquier carácter, no solo letras [a-z]
o [A-Z]
.
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
Puede consultar más sobre la mirada hacia atrás (?<!^)
aquí .