2016-01-15 5 views
6

वर्तमान में मैं 'डोमेन' निम्नलिखित regex वाले किसी भी URL से निकाल सकते हैं:जावास्क्रिप्ट Regex यूआरएल निकालने डोमेन केवल

/^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?([^:\/\n\?\=]+)/im

हालांकि मैं भी हो रही है उप डोमेन के भी जो मैं बचना चाहते हैं।

  • www.google.com
  • yahoo.com/something
  • freds.meatmarket.co.uk?someparameter
  • josh.meatmarket.co.uk/asldf: उदाहरण के लिए अगर मैं साइटों/asdf

मैं वर्तमान में मिलती है:

  • google.com
  • yahoo.com
  • freds.meatmarket.co.uk
  • josh.meatmarket.co.uk

उन पिछले दो मैं freds और josh उप डोमेन भाग को बाहर निकालने और निकालने ही सच्चा चाहते हैं डोमेन जो meatmarket.co.uk होगा।

मुझे एक और एसओएफ मिला जो PHP में हल करने का प्रयास करता है, दुर्भाग्य से मैं PHP नहीं जानता। क्या यह जेएस के लिए अनुवाद योग्य है (मैं वास्तव में Google स्क्रिप्ट FYI का उपयोग कर रहा हूं)?

function topDomainFromURL($url) { 
    $url_parts = parse_url($url); 
    $domain_parts = explode('.', $url_parts['host']); 
    if (strlen(end($domain_parts)) == 2) { 
     // ccTLD here, get last three parts 
     $top_domain_parts = array_slice($domain_parts, -3); 
    } else { 
     $top_domain_parts = array_slice($domain_parts, -2); 
    } 
    $top_domain = implode('.', $top_domain_parts); 
    return $top_domain; 
    } 

उत्तर

10

तो, आपको अपने परिणाम से छीनने वाले पहले होस्टनाम की आवश्यकता है, जब तक कि केवल दो भाग पहले ही न हों?

बस regexp कि हालत मिलान के साथ पहला मैच से अपने परिणाम postprocess:

function domain_from_url(url) { 
    var result 
    var match 
    if (match = url.match(/^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?([^:\/\n\?\=]+)/im)) { 
     result = match[1] 
     if (match = result.match(/^[^\.]+\.(.+\..+)$/)) { 
      result = match[1] 
     } 
    } 
    return result 
} 

console.log(domain_from_url("www.google.com")) 
console.log(domain_from_url("yahoo.com/something")) 
console.log(domain_from_url("freds.meatmarket.co.uk?someparameter")) 
console.log(domain_from_url("josh.meatmarket.co.uk/asldf/asdf")) 

// google.com 
// yahoo.com 
// meatmarket.co.uk 
// meatmarket.co.uk 
+0

निकालने में सक्षम था यह अब तक का सबसे अच्छा समाधान होने के लिए लग रहा है। मुझे लगता है कि मैं 'कुछ/कुछ/somthing' – MarkII

+0

@MarkII के रूप में दिए गए खराब डोमेन को बाहर करने के लिए संशोधित कर सकता हूं, हाँ, आप उस शीर्ष पर किसी भी अन्य चेक को स्ट्रिंग कर सकते हैं। मैंने अपने regexp के सामने '^' एंकर भी भूल गया है। –

+0

यह कुछ मान्य यूआरएल पैरामीटर के लिए काम नहीं करता है उदा। 'http: //freds.meatmarket.co.uk? someparameter? ordernumber = 1234 और ईमेल = break @ regex.com' मिलान किया गया उपसमूह 'regex.com' है क्योंकि यह @ – Davos

0

इस प्रयास करें: कुछ और से www को बदलने के लिए

https?:\/\/(www\.)?[[email protected]:%._\+~#=]{2,256}\.([a-z]{2,6}){1} 
0

प्रयास करें:

/^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:[^.]+\.)?([^:\/\n\?\=]+)/im

संपादित करें: आप पूरी तरह अपने regex में www सुरक्षित रखना चाहते हैं, तो आप यह कोशिश कर सकता है:

/^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?(?:[^.]+\.)?([^:\/\n\?\=]+)/im

+0

केवल टीएलडी (कॉम) ... – MarkII

संबंधित मुद्दे