Hallo, ich versuche, diese Eingabe zu parsen, um eindeutige Subdomains daraus zu extrahieren
ich möchte, dass die Ausgabe nur die Ausgabe enthält
“www.hackerone.com sub1.hackerone.com sub2.hackerone.com sub3.hackerone.com”
Hallo, ich versuche, diese Eingabe zu parsen, um eindeutige Subdomains daraus zu extrahieren
ich möchte, dass die Ausgabe nur die Ausgabe enthält
“www.hackerone.com sub1.hackerone.com sub2.hackerone.com sub3.hackerone.com”
@0xSphinx Das Einfachste ist ein Code-Node, mit Regex den Host aus jeder URL extrahieren und dann mit einem Set deduplizieren. Gib das ein:
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 } }));
Das erfasst alles, was zwischen :// und dem nächsten Schrägstrich, Doppelpunkt, Leerzeichen oder Anführungszeichen sitzt, und das Set entfernt die Duplikate. Du bekommst www.hackerone.com und sub1/sub2/sub3.hackerone.com (plus bare hackerone.com). Wenn du nur diejenigen mit einem Subdomain-Präfix und nicht die Apex möchtest, füge .filter(h => h.split(‘.’).length > 2) vor der map hinzu.
Hey @0xSphinx, Regex ist der richtige Ansatz. Eine Sache, die es wert ist hinzuzufügen: Deine Rohdaten enthalten ein paar fehlerhafte/Junk-Einträge (z.B. %00%25evil.com, die ${e.handle} Template-Zeichenkette und dieser angehängte Twitter/Blog-Text an einer URL). Das Regex wird diese größtenteils überspringen, da sie nicht dem sauberen ://host-Muster entsprechen, aber es ist wert, dein Ausgabe-Array nach der Ausführung nochmal zu überprüfen, da Look-alike-Strings wie evil.com durchschlüpfen könnten, wenn sich das Format leicht verschiebt.
Wenn du extra sicher gehen möchtest, kannst du nach der Deduplizierung einen einfachen Domain-Validierungsfilter hinzufügen:
.filter(h => /^[a-z0-9.-]+\.[a-z]{2,}$/i.test(h))
Das entfernt alles, das nicht wie eine saubere Domain aussieht, was nützlich ist, wenn man Daten aus ungeordneten/nicht vertrauenswürdigen Quellen wie dieser scrappt.