Necesito la expresión regular para todos los caracteres no alfabéticos y letras mayúsculas solamente.
let str = "ThisIs-an_example";¿Qué expresión regular debo usar para separar las palabras correctamente usando arr.join para que sea "este es un ejemplo"?
¿Algo como esto?
let str = "ThisIs-an_example"; let result = str.replace(/([AZ])/g, ' $1').toLowerCase().trim().replace(/[^az]/g, ' ');No es exactamente lo que pediste (matriz), pero hace el trabajo.
Tienes un par de problemas. La primera es que la división no incluye el separador, por lo que si solo divide en mayúsculas o caracteres que no sean letras, terminará perdiendo las letras mayúsculas. (ver primer ejemplo).
Por lo tanto, puede dividir en caracteres no alfabéticos O una afirmación de ancho cero de un carácter en mayúsculas después de algo (vea el segundo ejemplo), pero luego tiene un problema con las mayúsculas y minúsculas en la cadena final. Tendrá que retroceder si quiere lidiar con eso (vea el tercer ejemplo).
let str = "ThisIs-an_example"; let arr = str.split(/[^az]/); console.log(arr); arr = str.split(/[^A-Za-z]|(?=[AZ])/); console.log(arr.join(" ")); let cased = arr.map((a,i)=>{return i>0 ? a.toLowerCase() : a}); console.log(cased.join(" "));También tenga en cuenta que esto se dividirá en cualquier número que esté incluido. Si espera que aparezcan números, tendrá que modificar la expresión.
Puede split en un carácter no alfabético o buscar una letra mayúscula.
let str = "ThisIs-an_example"; let parts = str.split(/(?=[AZ])|[^az]/); console.log(parts); console.log(parts.join(' ').toLowerCase());