在javascript中使用正则表达式解析具有多个链接的文本

时间:2010-12-30 07:21:06

标签: javascript regex

您好 我有一个文本在文本中包含多个链接...

我想要一个正则表达式(我使用javascript),它可以解析文本并返回一个链接数组......

例如文字......

http://www.youtube.com/watch?v=-LiPMxFBLZY
testing
http://www.youtube.com/watch?v=Q3-l22b_Qg8&feature=related

正则表达式将解析文本并返回链接数组

arr[0] = "http://www.youtube.com/watch?v=-LiPMxFBLZY"
arr[1] = "http://www.youtube.com/watch?v=Q3-l22b_Qg8&feature=related"

我正试图用代码......

var ytre =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig ;
var matches = new Array();

                    matches = ytre.exec(text);
                    var jm;
                    if (matches !=null )
                    {
                        for (jm=0; jm<matches.length; jm++)
                        {
                            console.log(matches[jm]);
                        }
                    }

但它没有返回适当的结果......

请帮助

感谢

2 个答案:

答案 0 :(得分:8)

怎么样:

var text = 'http://www.youtube.com/watch?v=-LiPMxFBLZY testing http://www.youtube.com/watch?v=Q3-l22b_Qg8&feature=related http://yahoo.com';

var ytre = /(\b(https?|ftp|file):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|])/ig;

var resultArray = text.match(ytre);

See it

答案 1 :(得分:6)

要使用正则表达式解析URL,请查看定义URL的RFC。

因此,要查找正则表达式,请使用使协议和权限不可选的变体,例如/\b(([^:\/?#]+):)(\/\/([^\/?#]*))([^?#]*)(\?([^#]*))?(#(.*))?/gi

http://www.ietf.org/rfc/rfc3986.txt

  

附录B.解析URI参考   正则表达式

     

作为“第一场比赛胜利”算法   与“贪婪”相同   POSIX使用的消歧方法   正则表达式,很自然   并且常用的是常规   用于解析的表达式   URI的潜在五个组成部分   参考

     

以下行是常规   分解的表达方式   格式良好的URI引用   组件。

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9
     

第二行中的数字   以上只是为了提高可读性;   他们指出了参考点   每个子表达(即每个子表达)   配对括号)。我们指的是   值与子表达式匹配   作为$。例如,匹配   上面的表达

  http://www.ics.uci.edu/pub/ietf/uri/#Related
     

导致以下结果   子表达式匹配:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related
     

其中表示   该组件不存在,如上所述   查询组件的情况   上面的例子。因此,我们   可以确定五个的价值   组件为

  scheme    = $2
  authority = $4
  path      = $5
  query     = $7
  fragment  = $9