Necesito un método de JavaScript que me permita convertir la primera letra de cada palabra en una cadena en una letra mayúscula como esta: mike tyson wayne a Mike Tyson Wayne . El método también debería poder convertir la primera palabra después de un guión a una letra mayúscula como esta: mike-tyson wayne a Mike Tyson Wayne . El método también debería poder convertir palabras en mayúsculas para poner en mayúsculas palabras como esta: MIKE-TYSON WAYNE a Mike Tyson Wayne .
He probado este método usando expresiones regulares obtenidas de otro hilo:
text.replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase())Funcionó para convertir la primera letra de una cadena en mayúscula y también funciona para la primera letra de una cadena después del espacio.
Agregué esta expresión que se suponía que debía incluir la primera letra de una cadena después del espacio a la expresión. La expresión es (?:- |\d\. ).*
Combinado con la primera expresión, se convirtió en:
text.replace(/(^\w{1})|(\s{1}\w{1})|(?:- |\d\. ).*/g, match => match.toUpperCase());El problema es que el método anterior no funciona para las cadenas después del guión, pero aún funciona para las cadenas después del espacio.
\d es un dígito, por lo que su expresión coincide con un - o un dígito seguido de . ...{1} significa una ocurrencia, que es el valor predeterminado de todos modos...Prueba algo como esto:
/(^\w)|([-\s]\w)/gUna expresión regular como ... /(?<=\b)\w/g o /(?<=\b)\p{L}/gu ... que usan una mirada positiva hacia atrás para los límites de las palabras, pero la segunda variante hacer uso de escapes de propiedades Unicode podría ser un enfoque más genérico pero viable ...
console.log( "mike-tyson wayne" .replace((/(?<=\b)\w/g), match => match.toUpperCase()) ); console.log( "MIKE-TYSON WAYNE" .toLowerCase() .replace((/(?<=\b)\p{L}/gu), match => match.toUpperCase()) ); .as-console-wrapper { min-height: 100%!important; top: 0; }