const input = "2a smith road "; const input 2 = "333 flathead lake road, apartment 3b" const address = input.replace(/(^\w{1})|(\s+\w{1})/g, letter => letter.toUpperCase());La salida debería verse así:
input = "2A Smith Road" input = "333 Flathead Lake Road, Apartment 3B"Creo que buscar un carácter de palabra ( \w ), precedido ( (?<=...) ) por un límite de palabra ( \b ) y dígitos opcionales ( \d* ) debería cubrir todos los casos:
const input = [ "2a smith road", "333 flathead lake road, apartment 3b" ]; const capitalize = (s) => s.replace(/(?<=\b\d*)(\w)/g, l => l.toUpperCase()); input.forEach(s => console.log(capitalize(s)))Puede hacer coincidir 1 o más dígitos seguidos de un carácter en minúsculas \b\d+[az]\b y en mayúsculas toda la coincidencia
[ "2a smith road", "333 flathead lake road, apartment 3b" ].forEach(s => console.log(s.replace(/\b\d+[az]\b/g, m => m.toUpperCase())));