Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式-提取子域&;领域_Javascript_Regex_Url_Subdomain - Fatal编程技术网

Javascript 正则表达式-提取子域&;领域

Javascript 正则表达式-提取子域&;领域,javascript,regex,url,subdomain,Javascript,Regex,Url,Subdomain,我试图形成一个正则表达式(javascript/node.js),它将从任何给定的URL提取子域和域部分。这就是我的结局: [^(?:http:\/\/|www\.|https:\/\/)]([^\/]+) 现在,我正在考虑http,https作为协议&从URL的子域+域部分中排除“www.”部分。我检查了这个表达式&它几乎起作用了。但问题是: 成功 'http://mplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/

我试图形成一个正则表达式(javascript/node.js),它将从任何给定的URL提取子域和域部分。这就是我的结局:

[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)
现在,我正在考虑http,https作为协议&从URL的子域+域部分中排除“www.”部分。我检查了这个表达式&它几乎起作用了。但问题是:

成功

'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)
我只使用结果数组中的第一个元素。我不明白为什么“play.”和“tplay.”不起作用。在这方面有人能帮我吗

“/p”和“/t”对正则表达式计算器有任何意义吗

是否有其他方法可以使用正则表达式从任何给定URL提取子域和域

编辑-

例如:

=>play.google.com


=>mail.google.com您的正则表达式似乎不正确。试试这个正则表达式:

/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img

这里有一个解决方案,可以忽略前面的所有内容://

.*\://?([^\/]+)
如果您想忽略
www.

.*\://(?:www.)?([^\/]+)

你的正则表达式工作得很好。您只需要拆下支架。最后一句话是:

^(?:http:\/\/|www\.|https:\/\/)([^\/]+)

希望有用

你大概是第一百万个尝试用JavaScript解析URL的人了。我有点惊讶你没有看到这么多年前存在的任何问题。您最不想做的事情是编写另一个损坏的regexp,并对那些为您的问题提供答案的人表示应有的尊重

有许多记录良好的库和处理方法。谷歌。最简单的方法是在内存中创建
a
元素,为其分配
href
,然后访问其
主机名
和其他属性。看见如果这不能使你的船浮起来,那么就使用像s

如果你真的不想使用图书馆,并且坚持要重新发明轮子,那么至少要做如下事情:

function get_domain_from_url(url) {
    var a = document.createElement('a').
    a.setAttribute('href', url);
    return a.hostname;
}
本质上,您将URL的子域/域部分的提取委托给浏览器的URL解析逻辑,这比您编写的任何东西都要好

另见、或。你怎么会错过那些?抱歉,我必须投票将此作为副本关闭。

与中相同的RegExp,只添加了对like
//google.com
的支持:

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

不错。谢谢但是,我也需要忽略“www”部分。我该怎么做呢?那么,最后一个正则表达式是。*\:\/\/(?:www.)([^\/])+(?:www.)后面的“?”有什么作用?我很好奇。顺便说一下,谢谢你的帮助:)看看这个,我不需要图书馆。我知道可用于解析URL的库。我需要一个正则表达式。我面临的情况是,我无法继续编写javascript代码。该函数将正则表达式、选项和正则表达式应使用的值作为参数,并返回第一个匹配项。太好了,祝你在未来几年重新发明轮子并维护损坏的正则表达式。顺便问一下,“不能继续编写javascript代码”是什么意思?我的意思是,我不能将javascript代码作为参数发送。我需要通过常规表达,然后我需要通过常规表达,然后使用这一个::<代码>var-urregregregex,,<代码>var-我需要通过常规表达,我需要通过常规表达,然后我需要使用这一个::<代码>var-var-urregregEx,然后我需要使用这一个:::::::::::::::::::::::,我需要需要通过通过通过通过通过常规表达,然后需要需要通过常规表达,然后使用以下以下以下::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::0-4]\\d | 25[0-4]))(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\。(?:\。)[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+(?:\.(?:[a-z\\u00a1-\\uffff]{2,})))(本地主机)(?:\\\d{2,5})(?:(/\124\\\\\\\\?\ 35;)[^\\ s]*)$”此代码不在浏览器端使用。它用于node.js node.js has.js node.js有“url”可以使用的模块。但是,不幸的是,由于前面提到的原因,我不能使用它。您的正则表达式处理了我们将遇到的大多数URL类型。非常感谢。