تحليل إدخال النص

مرحبا، أحاول تحليل هذا الإدخال لاستخراج النطاقات الفرعية الفريدة منه

[ { “data”: “http://www.hackerone.com:80/\nhttps://www.hackerone.com/“,\nhttps://www.hackerone.com/”,“alts”:[],“httpStatus”:200\nhttp://hackerone.com/$handle/terms\nhttp://hackerone.com/$handle/terms_acceptance_data.csv\nhttps://sub3.hackerone.com/${e.handle}`;case\nhttps://hackerone.com/${et.hackerone_username}`\nhttp://hackerone.com/%25evil.com\nhttps://sub2.hackerone.com/ \nhttps://sub1.hackerone.com/%20%20\nhttps://hackerone.com/%20%20////////%20%20%20Twitter:%20@Paresh_parmar1%20fb:%20fb.com/paresh.parmar1993%20%20-%20https://blog.pareshparmar.com” } ]

أريد أن يكون الإخراج فقط للحصول على النطاقات الفرعية الفريدة
www.hackerone.com sub1.hackerone.com sub2.hackerone.com sub3.hackerone.com

@0xSphinx الأسهل هو استخدام Code node، استخدم regex لاستخراج host من كل url ثم أزل التكرارات باستخدام Set. ضع هذا:

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 } }));

هذا يستخرج أي شيء يقع بين :// والشرطة المائلة أو النقطتين أو المسافة أو علامات الاقتباس التالية، و Set تزيل التكرارات. ستحصل على www.hackerone.com و sub1/sub2/sub3.hackerone.com (بالإضافة إلى hackerone.com العادي). إذا كنت تريد فقط تلك التي تحتوي على بادئة subdomain وليس apex، أضف .filter(h => h.split(‘.’).length > 2) قبل map.

يا @0xSphinx، regex هو الأسلوب الصحيح. هناك شيء واحد يستحق الإضافة، بيانات المصدر لديك تحتوي على عدة إدخالات معيبة/غير مرغوبة مختلطة فيها (مثل %00%25evil.com، سلسلة القالب ${e.handle}، والنص الإضافي من Twitter/blog الملحق بأحد الروابط). ستتخطى regex معظم تلك الحالات منذ أنها لا تتطابق مع نمط ://host النظيف، لكن من الجدير بالفعل التحقق مرة أخرى من مصفوفة الإخراج بعد تشغيلها، لأن سلاسل تبدو متشابهة مثل evil.com قد تتسلل إذا تغير الشكل قليلاً.
إذا كنت تريد أن تكون آمناً بشكل إضافي، يمكنك إضافة فلتر تحقق أساسي من النطاق بعد إزالة التكرارات:
.filter(h => /^[a-z0-9.-]+\.[a-z]{2,}$/i.test(h))
هذا يزيل أي شيء ليس سلسلة نظيفة تبدو وكأنها نطاق، وهو مفيد عند الحصول على البيانات من مصادر فوضوية/غير موثوقة مثل هذه.

شكراً لك @achamm و@sergeys هذا مفيد جداً!