7

你知道如果你去 facebook.com 并在状态更新文本区域中输入一个 URL,它将自动被检测到,Facebook 将显示来自该 URL/链接的数据的小快照?Facebook 甚至不在乎您输入的 URL 是否带有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]+)?)?)

我用它来匹配在文本区域中输入的 URL。但是,它有误报;它将匹配document.write(foo)显然不是 URL。

Facebook 似乎没有这个问题。事实上,我可以在 Facebook 的 textarea 中输入“yahoo.com”,它会将其识别为 URL。但如果我输入“example.com”,它就不会识别它。因此,这意味着 Facebook 必须做的不仅仅是正则表达式匹配。还是我错了?

总之,我想知道 Facebook 在做什么,我想知道如何复制它。非常感谢任何想法、提示或解决方案。

谢谢阅读。

4

3 回答 3

1

匹配任何网址的最简单的正则表达式是

[a-z_\.\-0-9]+\.[a-z]+

如果存在,请查找结果。如果结果失败,那么它不是一个 url。

如果一个 url 在没有 http:// 前缀的情况下呈现给您,则没有保存方法来判断它是否是一个 url。

正则表达式将匹配stackoverflow.com中的以下字符串;

我总是使用stackoverflow.com来找到我需要的答案。

如果你尝试"http://www." & regex.match.value,你应该得到一个有效的网址......或没有......你不会知道,直到你进行查找。

于 2013-08-18T13:34:51.857 回答
0

也许在发布猜测的 url 之前,它会执行 ajax ping 或其他操作以确保候选 url 在呈现之前实际上是有效的?

于 2013-08-18T12:36:59.823 回答
0

facebook 正在使用 contenteditable div 来检测链接,最后我建议你听每个 keyup,因为它有多种用途,例如按下 @ 后,你也会看到朋友列表

于 2013-08-17T06:08:19.803 回答