【发布时间】:2013-06-29 22:33:03
【问题描述】:
【问题讨论】:
-
你试过了吗?
-
你尝试了什么? SO 不是代码生成器。
-
我试过了,我的正则表达式是 (?
标签: javascript
【问题讨论】:
标签: javascript
使用正则表达式,例如/(?:https?:\/\/)?(?:www\.)?(.*?)\//:
var str = "https://www.gmail.com/anything";
var match = str.match(/(?:https?:\/\/)?(?:www\.)?(.*?)\//);
console.log(match[match.length-1]); //gmail.com (last group of the match)
注意:这将获取 http/https 协议之后的所有内容,不包括 www - 直到第一个斜杠。
额外说明:很多域使用子域 - 因此mail.google.com 会突然变为google.com,因此不起作用。我的包括www 之外的每个子域分开。
【讨论】:
https?:\/\/ 表示“字符串http,后跟可选的s,后跟://”。因此(https?:\/\/)? 表示前一个,但问号表示“重复 1 或 0 次”(因此它是可选的)。检查我更新的工作代码答案。当括号以?: 开头时,它是一个非捕获组,意思是“不要将此匹配项放入我们的匹配结果中”。
/)。 http://www.google.com = http:。 http://www.google.com/ = google.com.
您可以使用<a> 来获取有关URL 的信息。例如:
var a = document.createElement("a");
a.href = "http://www.google.com";
您可以通过以下方式检索域:
var domain = a.hostname;
你可以去掉任何前导的“www”:
domain = domain.replace(/^www\./, "");
作为一个可重用的函数,你可以使用:
function getDomain(url) {
var a, domain;
a = document.createElement("a");
a.href = url;
domain = a.hostname;
domain = domain.replace(/^www\./, "");
return domain;
}
演示: http://jsfiddle.net/DuK6D/
More info/attributes about the HTMLAnchorElement JS object on MDN
【讨论】: