estoy usando esta funcion
function capitalizeAllWords(str: string) { return str.replace(/\b\w/s, letter => letter.toUpperCase()); }Resultado actual: ropa de hombre
Resultado requerido: Ropa de Hombre
¿Cómo lograr esto?
Usar
function capitalizeAllWords(str: string) { return str.replace(/(?<![\w'])\w/g, letter => letter.toUpperCase()); }EXPLICACIÓN
-------------------------------------------------------------------------------- (?<! look behind to see if there is not: -------------------------------------------------------------------------------- [\w'] any character of: word characters (az, AZ, 0-9, _), ''' -------------------------------------------------------------------------------- ) end of look-behind -------------------------------------------------------------------------------- \w word characters (az, AZ, 0-9, _) Tenga en cuenta la bandera g para reemplazar todas las coincidencias, no s .
Puede usar la devolución de llamada del método de reemplazo .
function capitalizeAllWords(str: string) { return str.replace(/'[az]|\b([az])/g, (m, g1) => g1 ? g1.toUpperCase() : m); } Capture lo que desea poner en mayúsculas en el grupo 1 (indicado por g1 en el código de ejemplo) y haga coincidir lo que desea dejar intacto (indicado por m en el código de ejemplo)
'[az]|\b([az])Explicación
'[az] Match ' y un char az| O\b([az]) Un límite de palabra \b para evitar una coincidencia parcial y capturar un carácter az en el grupo 1Demostración de expresiones regulares
const regex = /'[az]|\b([az])/g; const str = "Men's apparel $test"; let res = str.replace(regex, (m, g1) => g1 ? g1.toUpperCase() : m); console.log(res);