如果有一件事我无法理解,那就是正则表达式.
经过大量的搜索,我终于找到了适合我需求的产品:
function get_domain_name()
{
aaaa="http://www.somesite.se/blah/sdgsdgsdgs";
//aaaa="http://somesite.se/blah/sese";
domain_name_parts = aaaa.match(/:\/\/(.[^/]+)/)[1].split('.');
if(domain_name_parts.length >= 3){
domain_name_parts[0] = '';
}
var domain = domain_name_parts.join('.');
if(domain.indexOf('.') == 0)
alert("1"+ domain.substr(1));
else
alert("2"+ domain);
}
Run Code Online (Sandbox Code Playgroud)
它基本上给了我回域名,反正我还能得到域名之后的所有东西吗?在这种情况下,它将/blah/sdgsdgsdgs来自aaaa变量.
Yah*_*hel 72
您应该使用JavaScript DOM API提供的内置URL解析器,而不是依赖于可能不可靠的*正则表达式:
var url = document.createElement('a');
url.href = "http://www.example.com/some/path?name=value#anchor";
Run Code Online (Sandbox Code Playgroud)
这就是解析URL所需要做的全部工作.其他一切只是访问解析的值:
url.protocol; //(http:)
url.hostname; //(www.example.com)
url.pathname; //(/some/path)
url.search; // (?name=value)
url.hash; //(#anchor)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果您正在寻找/blah/sdgsdgsdgs,您可以访问它url.pathname
基本上,您只是在JavaScript中创建一个链接(技术上,锚元素),然后您可以直接调用已解析的部分.(因为您没有将它添加到DOM中,所以它不会在任何地方添加任何不可见的链接.)它的访问方式与location对象上的值相同.
(灵感来自这个精彩的答案.)
编辑:一个重要的注意事项:似乎Internet Explorer有一个错误,它忽略了pathname像这样的对象上的属性的前导斜杠.您可以通过执行以下操作来规范化它:
url.pathname = url.pathname.replace(/(^\/?)/,"/");
Run Code Online (Sandbox Code Playgroud)
注意:*:我说"可能不可靠",因为它可能很容易尝试构建或找到一个包罗万象的URL解析器,但有许多条件,边缘情况和宽容的解析技术可能无法正确考虑或正确支持的; 浏览器可能最擅长实现(因为解析URL对于它们的正常操作至关重要)这个逻辑,所以我们应该保持简单并留给它们.
Fel*_*ing 27
的RFC(见附录B)提供一个正则表达式来解析URI部分:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
哪里
scheme = $2
authority = $4
path = $5
query = $7
fragment = $9
Run Code Online (Sandbox Code Playgroud)
例:
function parse_url(url) {
var pattern = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
var matches = url.match(pattern);
return {
scheme: matches[2],
authority: matches[4],
path: matches[5],
query: matches[7],
fragment: matches[9]
};
}
console.log(parse_url("http://www.somesite.se/blah/sdgsdgsdgs"));
Run Code Online (Sandbox Code Playgroud)
给
Object
authority: "www.somesite.se"
fragment: undefined
path: "/blah/sdgsdgsdgs"
query: undefined
scheme: "http"
Run Code Online (Sandbox Code Playgroud)
请注意,这个解决方案不是最好的。我这样做只是为了满足OP的要求。我个人建议查看其他答案。
以下正则表达式将为您返回域名和其余内容。:\/\/(.[^\/]+)(.*):
我建议您在这里学习 RegExp 文档:http://www.regular-expressions.info/reference.html
使用你的功能:
function get_domain_name()
{
aaaa="http://www.somesite.se/blah/sdgsdgsdgs";
//aaaa="http://somesite.se/blah/sese";
var matches = aaaa.match(/:\/\/(?:www\.)?(.[^/]+)(.*)/);
alert(matches[1]);
alert(matches[2]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24105 次 |
| 最近记录: |