代码之家  ›  专栏  ›  技术社区  ›  Samin

匹配字符串中的所有URL并在javascript中返回数组

  •  9
  • Samin  · 技术社区  · 15 年前

    例如,我有以下字符串:

    var string = 'watch this video http://vimeo.com/8122132 and then see this picture http://www.flickr.com/photos/pmorgan/32606683/';
    

    我希望找到所有有效的URL并将它们放在一个数组中,在javascript(和jquery)中完成,因此在本例中:

    url[0] = http://vimeo.com/8122132
    url[1] = http://www.flickr.com/photos/pmorgan/32606683/
    

    目前,我只能匹配一个URL,但我希望匹配所有URL。这就是我所拥有的:

    geturl = new RegExp("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))");
    var url = geturl.exec(string);
    $('#urls').html(url[0]);
    

    相信我,输入url[1]、url[2]等不起作用:(

    有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  16
  •   YOU    15 年前

    在regexp中传递“g”

    geturl = new RegExp(
              "(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))"
             ,"g"
           );
    
    
    string.match(geturl).length
    2
    
    string.match(geturl)
     http://vimeo.com/8122132, http://www.flickr.com/photos/pmorgan/32606683/