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

Pra*_*rya 3 javascript regex

嗨我有一个文本有多个链接包裹在文本中...

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

例如对于文本......

http://www.youtube.com/watch?v=-LiPMxFBLZY
testing
http://www.youtube.com/watch?v=Q3-l22b_Qg8&feature=related
Run Code Online (Sandbox Code Playgroud)

正则表达式将解析文本并返回一系列链接

arr[0] = "http://www.youtube.com/watch?v=-LiPMxFBLZY"
arr[1] = "http://www.youtube.com/watch?v=Q3-l22b_Qg8&feature=related"
Run Code Online (Sandbox Code Playgroud)

即时尝试使用代码...

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]);
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

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

请帮忙

谢谢

cod*_*ict 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);
Run Code Online (Sandbox Code Playgroud)

看见


Mik*_*uel 6

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

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

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

附录B.使用正则表达式解析URI引用

由于"first-match-wins"算法与
POSIX正则表达式使用的"贪婪" 消歧方法相同,因此使用正则表达式解析
URI引用的潜在五个组件是很自然和平常的.

以下行是用于将
格式正确的URI引用分解为其组件的正则表达式.

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

上面第二行中的数字只是为了提高可读性; 它们表示每个子表达的参考点(即每个
配对括号).我们将子表达式匹配的值称为$.例如,将上面的表达式与之匹配

  http://www.ics.uci.edu/pub/ietf/uri/#Related
Run Code Online (Sandbox Code Playgroud)

导致以下子表达式匹配:

  $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
Run Code Online (Sandbox Code Playgroud)

where表示该组件不存在,如上
例中的查询组件的情况.因此,我们
可以确定五个组件的值

  scheme    = $2
  authority = $4
  path      = $5
  query     = $7
  fragment  = $9
Run Code Online (Sandbox Code Playgroud)