sun*_*rba 18 javascript regex subdomain url
我正在尝试形成一个正则表达式(javascript/node.js),它将从任何给定的URL中提取子域和域部分.这就是我最终得到的结果:
[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)
Run Code Online (Sandbox Code Playgroud)
现在,我只是考虑http,https for protocol&exclude"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)
Run Code Online (Sandbox Code Playgroud)
失败
'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)
Run Code Online (Sandbox Code Playgroud)
我只使用结果数组中的第一个元素.我无法理解为什么"玩".&"tplay." 不起作用.有人可以帮我这方面吗?
"/ 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
anu*_*ava 56
你的正则表达式似乎不正确.试试这个正则表达式:
/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img
Run Code Online (Sandbox Code Playgroud)
小智 11
您是第一个尝试解析JavaScript中的URL的人.我有点惊讶你没有看到任何关于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;
}
Run Code Online (Sandbox Code Playgroud)
从本质上讲,您将URL的子域/域部分的提取委托给浏览器的URL解析逻辑,这比您将要编写的任何内容都要好.
另请参阅使用jquery/javascript解析URL?,使用Javascript解析URL,如何在javascript中将URL解析为主机名和路径?,或使用JavaScript或jQuery解析URL.你是怎么想念那些的?对不起,我必须投票将其作为副本关闭.
与anubhava's答案中的RegExp相同,仅增加了对协议相对URL的支持,例如//google.com:
/^(?:https?:)?(?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)/im
Run Code Online (Sandbox Code Playgroud)
这是一个忽略之前所有内容的解决方案 ://
.*\://?([^\/]+)
Run Code Online (Sandbox Code Playgroud)
如果你想忽略 www.
.*\://(?:www.)?([^\/]+)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57448 次 |
| 最近记录: |