[英]URL extraction from string
我發現了一個正則表達式,假定它可以捕獲URL,但不能捕獲某些URL。
$("#links").change(function() {
//var matches = new array();
var linksStr = $("#links").val();
var pattern = new RegExp("^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$","g");
var matches = linksStr.match(pattern);
for(var i = 0; i < matches.length; i++) {
alert(matches[i]);
}
})
它不會捕獲此URL(我需要它):
但是它抓住了這個
幾件事:
它不起作用的主要原因是,當將字符串傳遞給RegExp()
,您需要將斜杠斜線化。 所以這:
"^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([az\\.]{2,6})([\\/\\w \\.-]*)*\\/?$"
應該:
"^(https?:\\/\\/)?([\\\\da-z\\\\.-]+)\\\\.([az\\\\.]{2,6})([\\/\\\\w \\\\.-]*)*\\/?$"
接下來,您說FF報告“正則表達式太復雜”。 這表明linksStr
是幾行URL候選。
因此,您還需要將m
標志傳遞給RegExp()
。
現有的正則表達式正在阻止合法值,例如:“ HTTP://STACKOVERFLOW.COM”。 因此,還要將i
標志與RegExp()
。
空格總是會蔓延,尤其是在多行值中。 使用前導\\s*
和$.trim()
進行處理。
不允許使用相對鏈接,例如/file/63075291/LlMlTL355-EN6-SU8S.rar
?
將所有內容放在一起(第5項除外),它將變為:
var linksStr = "http://www.wupload.com/file/63075291/LlMlTL355-EN6-SU8S.rar \n"
+ " http://XXXupload.co.uk/fun.exe \n "
+ " WWW.Yupload.mil ";
var pattern = new RegExp (
"^\\s*(https?:\/\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\/\\w \\.-]*)*\/?$"
, "img"
);
var matches = linksStr.match(pattern);
for (var J = 0, L = matches.length; J < L; J++) {
console.log ( $.trim (matches[J]) );
}
產生:
http://www.wupload.com/file/63075291/LlMlTL355-EN6-SU8S.rar http://XXXupload.co.uk/fun.exe WWW.Yupload.mil
為什么不做:URLS = str.match(/ https?:[^ \\ s] + / ig);
(https?\:\/\/)([a-z\/\.0-9A-Z_-\%\&\=]*)
這將在文本中找到任何網址
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.