有没有人建议检测一组字符串中的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
首先,您需要一个与网址匹配的优质正则表达式。这很难做到。
…几乎所有内容都是有效的网址。有一些标点符号规则将其拆分。没有标点符号,您仍然有一个有效的URL。 仔细检查RFC,看看是否可以构造“无效” URL。规则非常灵活。 例如:::::,一个有效的URL。路径是":::::"。漂亮的文件名,但是有效的文件名。 此外,/////也是有效的网址。netloc(“主机名”)为""。路径是"///"。再次,愚蠢。也有效。此URL规范化为"///" 等效的URL 。 类似的东西"bad://///worse/////" 是完全有效的。哑巴但有效。
…几乎所有内容都是有效的网址。有一些标点符号规则将其拆分。没有标点符号,您仍然有一个有效的URL。
仔细检查RFC,看看是否可以构造“无效” URL。规则非常灵活。
例如:::::,一个有效的URL。路径是":::::"。漂亮的文件名,但是有效的文件名。
:::::
":::::"
此外,/////也是有效的网址。netloc(“主机名”)为""。路径是"///"。再次,愚蠢。也有效。此URL规范化为"///" 等效的URL 。
/////
""
"///"
类似的东西"bad://///worse/////" 是完全有效的。哑巴但有效。
"bad://///worse/////"
无论如何,这个答案并不意味着为您提供最佳的正则表达式,而是证明如何使用JavaScript进行文本内的字符串包装。
好的,所以让我们使用这个: /(https?:\/\/[^\s]+)/g
/(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); // 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); });