Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:从字符串(包括querystring)提取URL并返回数组_Javascript_Jquery_Parsing_Url_Extract - Fatal编程技术网

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

Javascript:从字符串(包括querystring)提取URL并返回数组,javascript,jquery,parsing,url,extract,Javascript,Jquery,Parsing,Url,Extract,我知道这已经被问了一千次了(道歉),但搜索SO/谷歌等我还没有得到一个结论性的答案 基本上,我需要一个JS函数,当传递一个字符串时,该函数根据正则表达式识别并提取所有URL,返回所有找到的URL的数组。e、 g: function findUrls(searchText){ var regex=??? result= searchText.match(regex); if(result){return result;}else{return false;} } 该函数应

我知道这已经被问了一千次了(道歉),但搜索SO/谷歌等我还没有得到一个结论性的答案

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

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

例如,google.com,www.google.com, ftp.google.com、https://etc…及其任何带有查询字符串的派生 应该被退回


非常感谢,如果SO上的其他地方存在此问题,请再次道歉,但我的搜索尚未返回它。

您可以从以下位置使用正则表达式:

//gruber修订表达式-http://rodneyrehm.de/t/url-regex.html
(5::/{{1,3}}[a-3-3}[a-z0-9-10-9-10-10-10-10-10-10-10-10-9-10-10-10-9-9-9-9%的10-8-8-5-5-5村村村村村村村村村村村村村村村村村村村村村村)的村村村(村)的村村(村)的村(村)的村(村)的村(村)的村(村)的村)的村(村(村)的村)的村)的村(村)的村)的村(村(村)的村(村)的村)的村(村)的村(村)的村)的村(村(村)的村)的村)的村(村)的村)的村)的村(村(村)的村(村)的)的村(村(村)的)的)的村(村)的)的)[\]{};:“,«»””)/ig;
或者可能有帮助……

试试这个

var expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
你可以使用这个网站来测试regexp,我只使用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>«.
*/
var source=“你好www.example.com\n”
+ "http://google.com 是一个搜索引擎,就像http://www.bing.com\n“
+ "http://exämple.org/foo.html?baz=la#bumm是一个IDN URL,\n“
+ "http://123.123.123.123/foo.html 是IPv4和“
+ "http://fe80:0000:0000:0000:0204:61ff:fe9d:f156/foobar.html 是IPv6。\n“
+“链接也可以在parens中(http://example.org) "
+“或引用»http://example.org«.";
var result=URI.withinString(源、函数(url){
返回“

  • 下面的正则表达式从字符串(包括查询字符串)中提取URL并返回数组

    var url = "asdasdla hakjsdh aaskjdh https://www.google.com/search?q=add+a+element+to+dom+tree&oq=add+a+element+to+dom+tree&aqs=chrome..69i57.7462j1j1&sourceid=chrome&ie=UTF-8 askndajk nakjsdn aksjdnakjsdnkjsn";
    
    var matches = strings.match(/\bhttps?::\/\/\S+/gi) || strings.match(/\bhttps?:\/\/\S+/gi);
    
    输出:

    ["https://www.google.com/search?q=format+to+6+digir&…s=chrome..69i57.5983j1j1&sourceid=chrome&ie=UTF-8"]
    
    注意:
    这将处理带有单冒号的http://和字符串中带有双冒号的http://,对于https则处理相反的情况,因此您可以安全地使用它。:)

    可能重复:人们应该停止在JS变量前面加
    $
    …JS不是PHP!抱歉-我整天都在用PHP,会被删除的!Re:poss重复,列出的问题中的正则表达式不能回答我列出的所有标准。你能接受答案吗?请注意,使用正则表达式,尤其是这个正则表达式,可能会导致问题(“灾难性回溯”)—我会使用@chovy的答案并使用URI。withinString()这个答案中的正则表达式容易受到字符串(如
    )重做的攻击。”[https://stackoverflow.com/questions/11209016/javascript-extract-urls-from-string-inc-querystring-and-return-array/11209098#11209098](https://stackoverflow.com/questions/11209016/javascript-extract-urls-from-string-inc-querystring-and-return-array/11209098#11209098)“
    ["https://www.google.com/search?q=format+to+6+digir&…s=chrome..69i57.5983j1j1&sourceid=chrome&ie=UTF-8"]