您好 我有一个文本在文本中包含多个链接...
我想要一个正则表达式(我使用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]);
}
}
但它没有返回适当的结果......
请帮助
感谢
答案 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);
答案 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