¿Puede darnos más detalles? ¿Cuál es la forma general de las cadenas que desea separar? Si es solo esa cadena, ¿por qué no poner el espacio manualmente?
Puntiagudo
2
Por favor, sea más preciso, no creo que nadie pueda entender lo que está preguntando
Clement Herreman
1
defina el patrón que debe coincidir, por ejemplo, "un espacio cuando encuentre 'Mi' en la cadena" o "agregue un espacio antes de cada carácter en mayúscula, a menos que sea el primer carácter", o ....
JohnSmith
"entre MySites". ¿Cómo se puede colocar un espacio entre 1 cosa? Supongo que desea "Mis sitios" como resultado.
Rocket Hazmat
#meagar - bonito comentario (sarcasmo). ¿Nunca te enseñaron que si no tienes nada bueno que decir, no digas nada en absoluto?
carinlynchin
Respuestas:
167
Puede simplemente agregar un espacio antes de cada carácter en mayúscula y recortar los espacios iniciales y finales
Esto también funciona para "1AndAbove". La otra solución no lo hace. ¡¡Gracias!!
desaivv
1
"Falla" por acrónimos, ¿cómo evitar que actúe cuando 2 o más mayúsculas consecutivas?
Toni Michel Caubet
4
@ToniMichelCaubet fácil, modificar la expresión regular como esto: /([A-Z]+)/g. El + asegurará que coincida con tantas letras mayúsculas consecutivas como sea posible.
iFreilicht
¿Por qué se necesitan los paréntesis que utiliza para rodear '[AZ]' en este código?
Kristina Bressler
1
@Kristina El paréntesis dice 'Soy una variable'. Sin el paréntesis, se produce la respuesta '$ 1a $ 1ites' para '' MySites
user2051552
128
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:
Solo una advertencia, esto falla para letras simples "ThisIsATest" dará como resultado "This Is ATest".
Ceres
3
@Ceres: Buen punto. Ese caso podría manejarse insertando un espacio antes de cualquier mayúscula que no sea el primer carácter, pero aún tiene casos que no se pueden manejar sin reconocimiento de palabras, como "RunThisSQLQuery".
Guffa
1
para "ThisIsATest" - (sin contar el 'RunThisSQLQuery') puedes hacer esto: str.replace (/ ([AZ]) / g, '$ 1'). trim ()
carinlynchin
¡Brillante! ¡Gracias!
Ami Schreiber
21
¿Puedo sugerir una ligera modificación a la respuesta actualmente aceptada:
Esto funciona perfectamente para lo que necesitaba. Agregó perfectamente un espacio entre letras mayúsculas pero mantuvo los acrónimos juntos.
mighty_mite
6
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];}
newStringtendrá 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();})
Respuestas:
Puede simplemente agregar un espacio antes de cada carácter en mayúscula y recortar los espacios iniciales y finales
fuente
/([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:
Para casos especiales cuando aparecen 2 letras mayúsculas consecutivas (por ejemplo: ThisIsATest), agregue código adicional a continuación:
fuente
"RunThisSQLQuery"
.¿Puedo sugerir una ligera modificación a la respuesta actualmente aceptada:
Esto significa que:
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)
fuente
Esto debe insertar un espacio entre cada letra mayúscula que no esté precedido por una letra mayúscula.
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 Formfuente
regex para encontrar minúsculas - límite de mayúsculas y luego inserte un espacio
http://jsfiddle.net/uXy64/
fuente
Esto es lo que terminé usando para convertir una cadena en un caso de título, según algunas de las respuestas aquí:
Aquí hay un JSFiddle donde puede probar su cadena para ver si satisface sus necesidades: https://jsfiddle.net/thomastasa/5236dv8t/85/
Ejemplos:
fuente
Puede usar
String#split()
y un avance para el alfabeto en mayúscula ([A-Z]
) y luegoArray#join()
la matriz con un espacio:O, como una función de objeto de cadena:
fuente
En una sola expresión regular, reemplace (sin recortes ni uniones) que permite cualquier carácter, no solo letras
[a-z]
o[A-Z]
.Puede consultar más sobre la mirada hacia atrás
(?<!^)
aquí .fuente