我有一个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 :(得分:1)
我使用这个正则表达式,它适用于大多数情况。原始版本在http://daringfireball.net/2010/07/improved_regex_for_matching_urls,我必须对其进行修改,以避免在网址中匹配多个“。”。
/\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