簡體   English   中英

從字符串中提取URL

[英]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(我需要它):

http://www.wupload.com/file/63075291/LlMlTL355-EN6-SU8S.rar

但是它抓住了這個

http://www.wupload.com

幾件事:

  1. 它不起作用的主要原因是,當將字符串傳遞給RegExp() ,您需要將斜杠斜線化。 所以這:

     "^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([az\\.]{2,6})([\\/\\w \\.-]*)*\\/?$" 

    應該:

     "^(https?:\\/\\/)?([\\\\da-z\\\\.-]+)\\\\.([az\\\\.]{2,6})([\\/\\\\w \\\\.-]*)*\\/?$" 


  2. 接下來,您說FF報告“正則表達式太復雜”。 這表明linksStr是幾行URL候選。
    因此,您還需要將m標志傳遞給RegExp()

  3. 現有的正則表達式正在阻止合法值,例如:“ HTTP://STACKOVERFLOW.COM”。 因此,還要將i標志與RegExp()

  4. 空格總是會蔓延,尤其是在多行值中。 使用前導\\s*$.trim()進行處理。

  5. 不允許使用相對鏈接,例如/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM