在JavaScript中使用REGEX提取域名



我有一个域名列表,例如developer.mozilla.org。我只需要提取域名,例如mozilla.org。我使用了RegExp,但到目前为止还没有正确处理。不知道我想念什么。

我写了这个javaScript,该javascript并不能完全捕获我想要的部分。

var arr = ["developer.mozilla.org", "cdn.mdn.mozilla.net", "www.google-analytics.com", "www.youtube.com"];
var arrLength = arr.length;
var reg = new RegExp('((\.[a-zA-Z0-9]+)(\.[a-zA-Z0-9]+))$');
for (i=0; i< arrLength; i++)
{
    console.log(arr[i].match(reg))
}

如果您像这样编写代码:

var arr = ["developer.mozilla.org", "cdn.mdn.mozilla.net", "www.google-analytics.com", "www.youtube.com"];
var arrLength = arr.length;
var reg = /[^.]+.[^.]+$/
for (i=0; i< arrLength; i++)
{
    console.log(arr[i].match(reg)[0])
}

一些解释:

首先,您的正则有一个缺陷,这会导致" Google-Analytics"条目遗漏。我可能会建议您这样写于这样的正则

var reg = /[^.]+.[^.]+$/

您所写的正则截距有2个捕获组,这说明了您从控制台获得的阵列

['.mozilla.org', '.mozilla', '.org'] = [matching string, capturedGroup1, capturedGroup2]

您可以通过像这样编写正则罚款来使您的团体不捕捉:

var reg = new RegExp('(?:(?:\.[a-zA-Z0-9]+)(?:\.[a-zA-Z0-9]+))$');

或使用正则表达式字面形式为@bergi建议

var reg = /(?:(?:.[a-zA-Z0-9]+)(?:.[a-zA-Z0-9]+))$/

在任何情况下,当您使用match方法时,您将获得一个数组,而您真正感兴趣的是匹配的字符串,因此数组中的第一个元素。您会通过重写循环的正文来获得预期的结果

console.log((arr[i].match(reg) || [])[0]) // note I'm concerned with string.match returning null here

如果您真的不喜欢该数组,则可以使用字符串替换

console.log(arr[i].replace(/^.*.([^.]+.[^.]+)$/, '$1'))

w将获得下划线和连字符。第一个元素上的substring(1),因此您不打印第一个点。:(

let arr = ["developer.mozilla.org", "cdn.mdn.mozilla.net", 
    "www.google-analytics.com", "www.youtube.com"];
let expr = /(.[/w.-]+)(.[a-zA-Z0-9]+)/;
let regex = new RegExp(expr);
arr.forEach(e => console.log(e.match(regex)[0].substring(1)));

您不需要以下简单任务的正格。

var arr = ["developer.mozilla.org", "cdn.mdn.mozilla.net", "www.google-analytics.com", "www.youtube.com"];
var arrLength = arr.length;
for (var i = 0; i < arrLength; i++)
{
    var parts = arr[i].split('.');
    var domain = parts.slice(-2).join('.');
    console.log(domain);
}

或一个短得多的版本:

for (var i = 0; i < arr.length; i++)
{
    var domainName = arr[i].split('.').slice(-2).join('.');
    console.log(domainName);
}

slice(-2)在数组序列中提取最后两个元素。

最新更新