2011-09-26 73 views
0

我有一個JavaScript問題。需要幫助修復JavaScript正則表達式錯誤

我想創建一個正則表達式來檢測給定字符串中的URL。我粘貼了下面的正則表達式。它似乎無法涵蓋所有​​情況,例如google.com/index.html?2012 或www.google.com/dir/file.aspx?isc=2012。

關於我需要做些什麼才能使它工作,或者我可以使用更好的正則表達式(從其他地方)的任何想法?

("(^|\\s)(((http|https)(:\/\/))?(([a-zA-Z0-9]+[.]{1})+[a-zA-z0-9]+(\/{1}[a-zA-Z0-9\-]+)*\/?))", "i") 
+0

我添加您的評論到它所屬的職位。 – epascarello

回答

1

我用這個表達式,它是適合大多數的情況。原始版本在這裏http://daringfireball.net/2010/07/improved_regex_for_matching_urls,我不得不修改它以避免在URL中匹配多個'。'。

 
/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?: 
(?:[^\s().]+[.]?)+|\((?:[^\s()]+|(?:\([^\s()]+\)))*\))+(?:\((?:[^\s()]+|(?:\ 
([^\s()]+\)))*\)|[^\s`!()\[\]{};:'".,?«»「」‘’]))/gi 

如果你想在一開始的協議是可選的,然後使用這個

 
/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)?(?: 
(?:[^\s().]+[.]?)+|\((?:[^\s()]+|(?:\([^\s()]+\)))*\))+(?:\((?:[^\s()]+|(?:\ 
([^\s()]+\)))*\)|[^\s`!()\[\]{};:'".,?«»「」‘’]))/gi 
+1

這個正則表達式適用於提供的測試用例以及基本測試用例。我使用http://regexpal.com/檢查了它。 – Gibron

+0

謝謝!這檢測了很多我原來的正則表達式沒有捕獲的情況。但是,它不會檢測到google.com或stanford.edu。 – LewisLin

+0

@LewisLin是的...正則表達式在開始時需要一個有效的協議。識別google.com的問題在於,您最終會過於自由地識別諸如abc.def等模式。 –