使用Javascript从字符串中提取域?

使用Javascript从字符串中提取域?,javascript,function,Javascript,Function,我有一个字符串,其中包括许多网站的网址,但我想提取唯一的网址,是在这些括号[] 有人能纠正这个吗 注意:输出必须是www.google.com,并且不必将[]之外的域名放在字符串的末尾 var str='[[www.abc.com/corporate/partner/just-a-test]]acdascvdvsa.1563e24e32e42 |[[www.abc.com/corporate/partner/just-a-test]]1563e24e32e42.1563e24e32e42 |[

我有一个字符串,其中包括许多网站的网址,但我想提取唯一的网址,是在这些括号[]

有人能纠正这个吗

注意:输出必须是www.google.com,并且不必将[]之外的域名放在字符串的末尾

var str='[[www.abc.com/corporate/partner/just-a-test]]acdascvdvsa.1563e24e32e42 |[[www.abc.com/corporate/partner/just-a-test]]1563e24e32e42.1563e24e32e42 |[[www.abc.com/instruments/infrared guidemeasurement/]]www.google.com&156805689640.15668080901.3';
//字符串可以包括https,并且可以有.in而不是.com
var arr=str.split(“|”);
函数域名(str){
var match=str.match(/^(?:https?:\/\/)(?:w{3}\)([a-z\d\.-]+)\(?:[a-z\.]{2,10})(?:[\w\.-]*)*/);
if(match!=null&&match.length>0){
复赛;
}否则{
返回null;
}
}
var domainname=domainname(str);
var domain=域名;

console.log(域)将所有出现的
[[
,后跟非括号,后跟
]
替换为空格::

var str='[[www.abc.com/corporate/partner/just-a-test]]acdascvdvsa.1563e24e32e42 |[[www.abc.com/corporate/partner/just-a-test]]1563e24e32e42.1563e24e32e42 |[[www.abc.com/instruments/infrared guidemeasurement/]]www.google.com&156805689640.15668080901.3';
const result=str.replace(/\[\[^[\]*\]\]\]/g',);

控制台日志(结果)这可以通过拆分来实现

var str='[[www.abc.com/corporate/partner/just-a-test]]acdascvdvsa.1563e24e32e42 |[[www.abc.com/corporate/partner/just-a-test]]1563e24e32e42.1563e24e32e42 |[[www.abc.com/instruments/infrared guidemeasurement/]]www.google.com&156805689640.15668080901.3';
设ans=str.split(“])[6]
设finalAns=ans.split(&)[0]
console.log(finalAns)
两个主要步骤:

  • 创建与所需模式匹配的正则表达式
  • 使用
例如:

//匹配所有URL
//让正则表达式=/(([A-Za-z]{3,9}:(?:\/\/)(?::&=\+\$,\w]+-)[A-Za-z0-9\.-]+\;(?:www\.\.[\-;:&=\+$,\w]+.[A-Za-z0-9\-]+((?:/[\+%/\%/\%/\.\w\--/.*)(?:[\++++++-/.\U35W].*)(?:===![\+++--/.];
//仅匹配括号外的URL
(以下以下::::::::::::::::::::::::::::::::):::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了[^[\]]+(?:$\[)/g;
函数getUrlsFromText(输入){
返回input.match(regex);
}

console.log(getUrlsFromText('[[www.abc.com/corporate/partner/just-a-test]]acdascvdvsa.1563e24e32e42 |[[www.abc.com/corporate/partner/just-a-test]]1563e24e32e42.1563e32e42 |[[www.abc.com/instruments/infrared guidemeasurements/]]www.google.com&156805689640.1566806059701.3'));
正如CertainPerformance建议的那样,您可以使用replace排除[]中的url,然后使用regex提取域名。下面是代码:

var str='[[www.abc.com/corporate/partner/just-a-test]]acdascvdvsa.1563e24e32e42 |[[www.abc.com/corporate/partner/just-a-test]]1563e24e32e42.1563e24e32e42 |[[www.abc.com/instruments/infrared guidemeasurement/]]www.google.com&156805689640.15668080901.3';
var str=str.replace(/\[\[^[\]*\]\]\]/g',);
变量ptrn=/^(?:https?:\/\/)?(?:w{3}\)?([a-z\d\.-]+)\(?:[a-z\.]{2,10})(?:[\w\.-]*)*/g;
变量i,值,域,len,数组;
数组=str.split(“|”);
len=数组长度;
对于(i=0;len>i;i++){
值=数组[i]。匹配(ptrn);
如果(值!==null){
域=值;
}
否则{
domain=“未找到”;
}
}
document.write(“Domain is=”,Domain);

dude你只想要“www.google.com&156689640.15668060701.3”吗只有www.google.com,无论其位置如何,域名可以以htttps开始,并且可以有。在结尾处代替.com谢谢你的回答,AndroidNoobie!但这不是期望的输出,我已经编辑了问题,请检查。过程是一样的,你只需使用不同的正则表达式来匹配期望的模式。我知道我需要d不同的正则表达式看到我也使用正则表达式,但这并不能证明渴望的结果。再次感谢AndroidNoobie为您提供宝贵的时间和答案。您的答案很有用。但我只想提取url,直到-,因此正确的输出将是www.google.com感谢您的回答akshay!但这不是渴望的输出,我已编辑了问题,请检查这是正确的答案,如果我有一个字符串,它每次都在同一个地方包含url,但这个不可能发生的url可以位于不同的位置,我只想编写一次代码来获取url,而不管它的位置如何,所以我[6]如果字符串要更改,将不会给出正确的输出。代码必须是动态的,这是您答案的关键性能!您的答案是有用的:)请尝试解释您建议的答案。这将有助于用户。FWIW我在谷歌搜索了“从字符串提取域”这个帖子出现了。这里没有人有一个简单的答案,所以我必须自己编码。如果问题的标题不正确,那么我将删除我的答案。标题是误导性的,我同意。你的答案并不能解决实际问题。而你的帖子进入了低质量帖子队列。请阅读此帖子
var dirtySource = "https://example.com/subdirectory";
var dirtyPos = dirtySource.indexOf("://"); // works for http and https
var cleanSource = dirtySource.substr(dirtyPos+3);
cleanSource = cleanSource.split("/")[0]; // trim off subdirectories