Solución
solution.tsTypeScript
type ParsedURL = { protocol: string; host: string; path: string };
export function parseUrl(url: string): ParsedURL {
// Usa una expresión regular con grupos de captura para extraer protocolo, host y path
const urlPattern = /^(https?):\/\/([^\/\s]+)(\/[^\s]*)?$/;
// REGEX explicado:
// ^ --> empieza por lo siguiente
// Grupos de captura:
// grupo 1, PROTOCOL
// --> https?: empieza por http y la 's' es opcional
// :\/\/, separador, sin capturarlo --> :// (dos puntos y doble barra inclinada)
// grupo 2, HOST
// --> [^\/\s]+: cualquier caracter que no sea una barra / o un espacio; una vez o más
// grupo 3, PATH:
// (\/[^\s]*)? --> empieza con barra inclinada (/) y sigue cualquier cosa que
// que NO sea un espacio. Este grupo es opcional, ?
// $ --> terminó con lo anterior
const matches = url.match(urlPattern);
console.log(matches);
// [
// "https://example.com/path/to/page",
// "https","example.com",
// "/path/to/page"
// ]
// ESCUDO, guard, por si no encuentra nada:
if(!matches) {
return { protocol: '', host: '', path: '' };
}
// matches[3] podría ser 'undefined', ya que es opcional => ??
return { protocol: matches[1], host: matches[2], path: matches[3] ?? ''};
}0respuestas