2011-09-26 69 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等模式。 –