你知道如果你去facebook.com并输入一个URL到状态更新textarea它将自动被检测到,Facebook将显示该URL /链接数据的一些快照? Facebook甚至不关心您是否使用http://
等协议输入网址。
我想要复制这种行为。现在我有这个正则表达式:
((?:https?:\/\/)?)((?:[a-zA-Z0-9\-]+\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2})(?:[a-z0-9\._\/~%\-\+&\#\?!=\(\)@]*)?(?:#?(?:[w]+)?)?)
我用它来匹配在textarea中输入的URL。但是,它有误报;它会匹配document.write(foo)
,它显然不是一个URL。
Facebook似乎没有这个问题。事实上,我可以在Facebook的textarea中键入“yahoo.com”,它会将其识别为URL。但如果我输入“example.com”,它就不会识别它。所以,这意味着Facebook必须做的不仅仅是正则表达式匹配。或者我错了吗?
总之,我想知道Facebook在做什么,我想知道如何复制它。任何想法,提示或解决方案都非常感谢。
感谢阅读。
答案 0 :(得分:1)
匹配任何网址的最简单的正则表达式是
[a-z_\.\-0-9]+\.[a-z]+
如果存在,请对结果进行查找。如果结果失败,那么它不是一个网址。
如果网址没有http://前缀,则无法保存网址是否为网址。
正则表达式将匹配以下字符串中的 stackoverflow.com ;
我总是使用 stackoverflow.com 来找到我需要的答案。
如果你尝试"http://www." & regex.match.value
,你应该得到一个有效的网址......或者不是......在你查找之前你不会知道。
答案 1 :(得分:0)
facebook正在使用contenteditable div来检测链接, 在你的结尾,我建议你听每个键盘,因为它有多种用途,例如在按@后你也会看到朋友列表
答案 2 :(得分:0)
也许在发布猜测的网址之前,它会进行ajax ping或其他什么来确保候选网址在呈现之前确实存在?