我试图形成一个正则表达式(javascript / node.js),它将提取子域&来自任何给定URL的域部分。这就是我最终的结果:
[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)
现在,我只考虑http,https for protocol&排除" www。"来自URL的子域+域部分的部分。我查看了表达式&它几乎可以工作。但是,问题在于:
成功
'http://mplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
'http://lplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
失败
'http://play.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
'http://tplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
我只使用结果数组中的第一个元素。我无法理解为什么"玩。" &安培; " T播放&#34。不起作用。有人可以帮我这方面吗?
" / p"和" / t"对正则表达式求值程序有什么意义吗?
还有其他提取子域的方法吗?来自使用正则表达式的任何给定URL的域?
编辑 -
示例:
https://play.google.com/store/apps/details?id=com.skgames.trafficracer =>的 play.google.com
https://mail.google.com/mail/u/0/#inbox =>的 mail.google.com
答案 0 :(得分:52)
答案 1 :(得分:10)
您是第一个尝试解析JavaScript中的网址的人。我有点惊讶你没有看到任何关于SO追溯年代的现有问题。你要做的最后一件事就是编写另一个破坏的正则表达式,并对那些为你的问题提供答案的人给予应有的尊重。
有许多文档齐全的库和方法来处理这个问题。谷歌一下。最简单的方法是在内存中创建a
元素,为其分配href
,然后访问其hostname
和其他属性。见http://tutorialzine.com/2013/07/quick-tip-parse-urls/。如果这不会漂浮你的船,那么使用像uri.j s。
如果你真的不想使用图书馆,并坚持重新发明轮子,那么至少要做如下的事情:
function get_domain_from_url(url) {
var a = document.createElement('a').
a.setAttribute('href', url);
return a.hostname;
}
基本上,您将URL的子域/域部分的提取委托给浏览器的URL解析逻辑,这比您将要编写的任何内容都要好。
另请参阅Parse URL with jquery/ javascript?,Parse URL with Javascript,How do I parse a URL into hostname and path in javascript?或parse URL with JavaScript or jQuery。你是怎么想念那些的?对不起,我必须投票将其作为副本关闭。
答案 2 :(得分:5)
与anubhava's
接受的答案相同的RegExp,仅添加//google.com
protocol-relative URLs的支持:
/^(?:https?:)?(?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)/im
答案 3 :(得分:4)
这是一个忽略://
.*\://?([^\/]+)
如果你想忽略www.
.*\://(?:www.)?([^\/]+)
答案 4 :(得分:1)
你的正则表达式表达非常好。您只需要删除括号。最后的表达是:
^(?:http:\/\/|www\.|https:\/\/)([^\/]+)
希望它有用!