小编典典

使用 JavaScript 检测文本中的 URL

all

有没有人建议在一组字符串中检测 URL?

arrayOfStrings.forEach(function(string){
  // detect URLs in strings and do something swell,
  // like creating elements with links.
});

更新: 我最终使用这个正则表达式进行链接检测——显然是几年后。

kLINK_DETECTION_REGEX = /(([a-z]+:\/\/)?(([a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|local|internal))(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-zA-Z0-9!$&'()*+.=-_~:@/?]*)?)(\s+|$)/gi

完整的助手(带有可选的 Handlebars 支持)在要点 #1654670中。


阅读 55

收藏
2022-07-01

共1个答案

小编典典

首先,您需要一个匹配 url
的良好正则表达式。这很难做到。看这里这里):

…几乎任何东西都是有效的 URL。有一些标点符号规则可以将其拆分。没有任何标点符号,您仍然有一个有效的 URL。

仔细检查 RFC,看看你是否可以构造一个“无效”的 URL。规则非常灵活。

例如:::::是一个有效的 URL。路径是":::::"。一个非常愚蠢的文件名,但是一个有效的文件名。

此外,/////是一个有效的 URL。netloc(“主机名”)是"". 路径是"///"。再次,愚蠢。也有效。此 URL
规范化到"///" 哪个是等效的。

类似的东西"bad://///worse/////" 是完全有效的。愚蠢但有效。

无论如何,这个答案并不是为了给你最好的正则表达式,而是证明如何使用 JavaScript 在文本中进行字符串换行。

好的,让我们只使用这个:/(https?:\/\/[^\s]+)/g

同样, 这是一个糟糕的正则表达式 。它会有很多误报。但是对于这个例子来说已经足够了。

function urlify(text) {

  var urlRegex = /(https?:\/\/[^\s]+)/g;

  return text.replace(urlRegex, function(url) {

    return '<a href="' + url + '">' + url + '</a>';

  })

  // or alternatively

  // return text.replace(urlRegex, '<a href="$1">$1</a>')

}



var text = 'Find me at http://www.example.com and also at http://stackoverflow.com';

var html = urlify(text);



console.log(html)


// html now looks like:
// "Find me at <a href="http://www.example.com">http://www.example.com</a> and also at <a href="http://stackoverflow.com">http://stackoverflow.com</a>"

所以总而言之尝试:

$$('#pad dl dd').each(function(element) {
    element.innerHTML = urlify(element.innerHTML);
});
2022-07-01