match(/((?:http|https):\/\/)*(?=(?:[\w]*\.[\w]*:[\d]*))*([\w]*\.[\w]*:[\d]*\/)*((\w*\/)*)*(\w*\.\w*)*\?*((?:\w*=\w*)*(?:\w*=\w*&)*(?:\w*=\w*)*)*(#\w*)*/)
разобрать нужно адрес http(s)://google.com:8080/folder/folder/file.php?param1=param1¶m2=param2#hash
При этом в адресе могут отсутствовать домен следовательно и протокол тоже,могут быть а могут не быть директории может быть или не быть файла или может быть применен чпу могут присутствовать а могут отсутствовать параметры и хеш.
на выходе нужно получить ["http","google.com:8080","/folder/folder/","file.php","param1=param1¶m2=param2","hash"]