嗨我有一个文本有多个链接包裹在文本中...
我想要一个正则表达式(即时通讯使用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)
但它没有返回适当的结果......
请帮忙
谢谢
怎么样:
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)
要使用正则表达式解析URL,请查看定义URL的RFC.
因此,要查找正则表达式,请使用使协议和权限非可选的变体,例如/\b(([^:\/?#]+):)(\/\/([^\/?#]*))([^?#]*)(\?([^#]*))?(#(.*))?/gi.
http://www.ietf.org/rfc/rfc3986.txt说
附录B.使用正则表达式解析URI引用
由于"first-match-wins"算法与
POSIX正则表达式使用的"贪婪" 消歧方法相同,因此使用正则表达式解析
URI引用的潜在五个组件是很自然和平常的.以下行是用于将
格式正确的URI引用分解为其组件的正则表达式.Run Code Online (Sandbox Code Playgroud)^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 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 = Relatedwhere表示该组件不存在,如上
例中的查询组件的情况.因此,我们
可以确定五个组件的值Run Code Online (Sandbox Code Playgroud)scheme = $2 authority = $4 path = $5 query = $7 fragment = $9