Olá, estou tentando analisar esta entrada para extrair subdomínios únicos dela
quero que a saída obtenha apenas a saída para obter o
“www.hackerone.com sub1.hackerone.com sub2.hackerone.com sub3.hackerone.com”
Olá, estou tentando analisar esta entrada para extrair subdomínios únicos dela
quero que a saída obtenha apenas a saída para obter o
“www.hackerone.com sub1.hackerone.com sub2.hackerone.com sub3.hackerone.com”
@0xSphinx o mais fácil é usar um nó Code, fazer regex para extrair o host de cada URL e depois deduplicar com um Set. joga isso aqui:
const text = $input.first().json.data;
const hosts = [...text.matchAll(/https?:\/\/([^\/\s:"'`]+)/g)].map(m => m[1]);
return [...new Set(hosts)].map(h => ({ json: { subdomain: h } }));
isso captura tudo que fica entre :// e a próxima barra, dois-pontos, espaço ou aspas, e o Set elimina os duplicados. você vai pegar www.hackerone.com e sub1/sub2/sub3.hackerone.com (mais o domínio nu hackerone.com). se quiser só os que têm um prefixo de subdomínio e não o apex, adiciona .filter(h => h.split(‘.’).length > 2) antes do map.
Oi @0xSphinx, regex é realmente a abordagem correta. Uma coisa que vale a pena adicionar: seus dados brutos têm algumas entradas malformadas/lixo misturadas (como %00%25evil.com, a string de template ${e.handle} e aquele texto de Twitter/blog anexado ao final de uma URL). A regex vai pular a maioria delas, já que não correspondem a um padrão clean ://host, mas vale a pena verificar novamente seu array de saída depois de rodar, já que strings parecidas como evil.com podem passar se o formato mudar um pouco.
Se quiser ser extra seguro, pode adicionar um filtro básico de validação de domínio depois da deduplicação:
.filter(h => /^[a-z0-9.-]+\.[a-z]{2,}$/i.test(h))
Isso remove qualquer coisa que não pareça um domínio limpo, o que é útil ao fazer scraping de dados de fontes bagunçadas/não confiáveis como essa.