📜  域正则表达式 - Javascript (1)

📅  最后修改于: 2023-12-03 14:51:35.666000             🧑  作者: Mango

域正则表达式 - JavaScript

在 JavaScript 中,我们可以使用正则表达式来匹配和操作字符串。域正则表达式是一种特殊的正则表达式,它用于匹配网址的域名部分。本文将介绍如何在 JavaScript 中使用域正则表达式。

匹配域名

通常,在使用域正则表达式时,我们需要先提取出网址的域名部分。在 JavaScript 中可以使用 window.location.hostname 属性获取当前网页的域名部分。例如,如果当前网址是 http://www.example.com/path/to/page.html,那么 window.location.hostname 的值就是 www.example.com

接下来,我们可以使用正则表达式来匹配域名。一般情况下,域名可以包含英文字母、数字、连字符和点号。使用 [a-zA-Z0-9\-\.]+ 正则表达式可以匹配所有符合要求的域名。代码如下:

const pattern = /[a-zA-Z0-9\-\.]+/;
const domain = window.location.hostname.match(pattern)[0];
console.log(domain);

运行结果:

www.example.com
匹配子域名

除了主域名之外,有时我们还需要匹配子域名。例如,对于 www.example.com,我们可以提取出 www 这个子域名。在 JavaScript 中,我们可以使用正则表达式的分组功能来匹配子域名。代码如下:

const pattern = /([a-zA-Z0-9\-]+)\.[a-zA-Z0-9\-\.]+/;
const subdomain = window.location.hostname.match(pattern)[1];
console.log(subdomain);

运行结果:

www
匹配顶级域名

有时候,我们需要提取出顶级域名,例如对于 www.example.com,我们可以提取出 com 这个顶级域名。在 JavaScript 中,我们可以使用正则表达式的零宽断言来匹配顶级域名。代码如下:

const pattern = /(?:[a-zA-Z0-9\-]+\.)+([a-zA-Z]{2,})/;
const tld = window.location.hostname.match(pattern)[1];
console.log(tld);

运行结果:

com
匹配二级域名

除了主域名和子域名之外,我们有时候需要匹配二级域名。例如,对于 www.example.com.cn,我们可以提取出 example 这个二级域名。在 JavaScript 中,我们可以使用正则表达式的分组和零宽断言来匹配二级域名。代码如下:

const pattern = /(?:([a-zA-Z0-9\-]+)\.)?(?:[a-zA-Z0-9\-]+\.)+([a-zA-Z]{2,})/;
const sld = window.location.hostname.match(pattern)[1] || null;
console.log(sld);

运行结果:

example
匹配协议和端口号

除了域名之外,有时候我们还需要匹配协议和端口号。在 JavaScript 中,我们可以使用 window.location.protocol 属性获取当前网页的协议部分,使用 window.location.port 属性获取当前网页的端口号。例如,如果当前网址是 http://www.example.com:8080/path/to/page.html,那么 window.location.protocol 的值就是 http:window.location.port 的值就是 8080

接下来,我们可以使用正则表达式来匹配协议和端口号。代码如下:

const pattern = /^([a-z]+:)?\/\/[a-zA-Z0-9\-\.]+(:\d+)?/;
const url = window.location.href.match(pattern)[0];
console.log(url);

运行结果:

http://www.example.com:8080
总结

域正则表达式是 JavaScript 中常用的正则表达式之一,它可以用来匹配和操作网址的域名部分。在本文中,我们介绍了如何匹配主域名、子域名、顶级域名和二级域名,并提取了协议和端口号部分。熟练掌握域正则表达式可以帮助开发者更加灵活地操作网址,提高开发效率。