繁体   English   中英

如何从JavaScript中的段落中提取数组中的URL

[英]How to fetch urls in array from paragraphs in javascript



我想获取数组中JavaScript的段落或句子中所有可用的URL。 例如,检查以下段落:

请检出http://stackoverflow.com 它具有非常酷的徽标https://d13yacurqjgara.cloudfront.net/users/1249/screenshots/2247671/stackoverflow.png

从上面的字符串中,我们必须获取这两个URL的数组。

解决方案1:解决方案1,我知道是用空格分割段落,遍历数组,然后逐一检查URL,然后推入URL的数组。 但是,这是需要时间的解决方案。

有没有找到更好的解决方案,或者上述解决方案最快且可行?

谢谢。

这是你想要的?

var list = [];
var sentence = "Please checkout http://stackoverflow.com. It has very cool logo https://d13yacurqjgara.cloudfront.net/users/1249/screenshots/2247671/stackoverflow.png.";

var result = checkForURL(sentence);

function checkForURL(text) {
    var urlRegex = /(https?:\/\/[^\s]+)/g;
    return text.replace(urlRegex, function (url) {
        return '<a>' + url + '</a>';
    })
}
var number = result.split('<a>');

for (var i = 1; i < number.length; i++) {
        list.push(number[i].split(".</a>")[0]);             
}
alert(list);

您可能希望在://上拆分,以获取一个较小的数组进行迭代。

例:

演示 JSFiddle

的HTML

<p id='p'>
Please checkout http://stackoverflow.com. It has very cool logo https://d13yacurqjgara.cloudfront.net/users/1249/screenshots/2247671/stackoverflow.png.
</p>
<h4>
URLs
</h4>
<ol id='results'>

</ol>

Java脚本

findUrls();

function findUrls(){
  var p = document.getElementById('p');
  var res = document.getElementById('results');
  var pStr = p.innerText;
  var parts = pStr.split(/:\/\//);
  if (parts.length < 2) 
    return;
  for (var i = 1 ; i < parts.length ; i++){ 
    var part = parts[i];
    var lastPart = parts[i-1];
    if (lastPart.length < 4 )
      continue;
    if (lastPart.length >= 4 && lastPart.substr(-4) == 'http')
      part = 'http://' + part;
    else if (lastPart.length >= 5 && lastPart.substr(-5) == 'https')
      part = 'https://' + part;    
    var firstSpace = part.indexOf(' ');
    if (firstSpace > -1)
      part = part.substring(0, firstSpace);
    var lastChar = part.charAt(part.length - 1);
    if (lastChar == ',' || lastChar == '.' /* || ... */)
      part = part.substring(0,part.length - 1);
    res.innerHTML += '<li>' + part + '</li>'; // or push part to some result array  
  }
}

试试这种方法。 它可能需要一些微调。

 var paragraphs = document.getElementsByTagName('p') var regex = /(https?:\\/\\/.*?)(\\s|$)/g; var urls = []; var badLastChars = [".", ","]; for (var i = 0; i < paragraphs.length; i++) { var p = paragraphs[i].innerText; var match; while (match = regex.exec(p)) { var url = match[1]; var lastChar = url[url.length-1]; if (badLastChars.indexOf(lastChar) > -1 ) { url = url.slice(0,url.length-1); } console.log(url); urls.push(url); } } 
 <p> Please checkout http://stackoverflow.com. It has very cool logo https://d13yacurqjgara.cloudfront.net/users/1249/screenshots/2247671/stackoverflow.png.</p> <p> Another paragraph https://stackexchange.com. and here is another url I am making up: https://mycoolurlexample.com/this/is/an/example</p> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM