Javascript:从字符串(包括查询字符串)中提取 URL 并返回数组

2023-12-29

我知道这个问题之前已经被问过一千次了(抱歉),但是搜索 SO/Google 等我还没有得到结论性的答案。

基本上,我需要一个 JS 函数,当传递一个字符串时,它会根据正则表达式识别并提取所有 URL,返回所有找到的数组。例如:

function findUrls(searchText){
    var regex=???
    result= searchText.match(regex);
    if(result){return result;}else{return false;}
}

该函数应该能够检测并返回任何潜在的 url。我知道这个固有的困难/问题(右括号等),所以我觉得这个过程需要是:

分割字符串 (searchText)进入不同的部分(开始/结束),其两侧要么没有任何内容,要么有空格或回车符,从而产生不同的内容块,例如进行拆分。

对于分割产生的每个内容块,查看它是否符合任何构造的 URL 的逻辑,即它是否包含紧跟在文本后面的句点(用于限定潜在 URL 的一个常量规则)。

正则表达式应查看句点后是否紧跟其他文本(其类型为 tld、目录结构和查询字符串允许的类型),并且其前面是否为 URL 允许类型的文本。

我知道可能会导致误报,但是随后将通过调用 URL 本身来检查任何返回的值,因此可以忽略这一点。我发现的其他函数通常也不返回 URL 查询字符串(如果存在)。

因此,该函数应该能够从一段文本返回任何类型的 URL,即使这意味着将 will.i.am 识别为有效 URL!

eg. http://www.google.com http://www.google.com、 google.com、 www.google.com、http://google.com http://google.com, ftp.google.com、https:// 等...及其带有查询字符串的任何派生 应该归还...

非常感谢,如果这在其他地方存在,但我的搜索没有返回它,再次道歉。


我只使用 URI.js——这很容易。

var source = "Hello www.example.com,\n"
    + "http://google.com is a search engine, like http://www.bing.com\n"
    + "http://exämple.org/foo.html?baz=la#bumm is an IDN URL,\n"
    + "http://123.123.123.123/foo.html is IPv4 and "
    + "http://fe80:0000:0000:0000:0204:61ff:fe9d:f156/foobar.html is IPv6.\n"
    + "links can also be in parens (http://example.org) "
    + "or quotes »http://example.org«.";

var result = URI.withinString(source, function(url) {
    return "<a>" + url + "</a>";
});

/* result is:
Hello <a>www.example.com</a>,
<a>http://google.com</a> is a search engine, like <a>http://www.bing.com</a>
<a>http://exämple.org/foo.html?baz=la#bumm</a> is an IDN URL,
<a>http://123.123.123.123/foo.html</a> is IPv4 and <a>http://fe80:0000:0000:0000:0204:61ff:fe9d:f156/foobar.html</a> is IPv6.
links can also be in parens (<a>http://example.org</a>) or quotes »<a>http://example.org</a>«.
*/
  • https://github.com/medialize/URI.js https://github.com/medialize/URI.js
  • http://medialize.github.io/URI.js/ http://medialize.github.io/URI.js/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript:从字符串(包括查询字符串)中提取 URL 并返回数组 的相关文章

随机推荐