如何从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>

爪哇语

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>

最新更新