【问题标题】:How to extract a URL from a Tweet with a JavaScript RegEx?如何使用 JavaScript RegEx 从推文中提取 URL?
【发布时间】:2011-06-05 23:57:02
【问题描述】:

假设我将推文作为字符串存储在 JS 变量中...

如何使用 JavaScript RegEx 从推文中提取 URL?

这应该比从字符串中提取 URL 容易得多,因为:

我假设任何以 http 或 www 开头并以空格(或推文结尾)结尾的内容都是 URL。

【问题讨论】:

  • 你只需要一个匹配 URL 的 JS 正则表达式。有很多关于 SO 的问题可以回答这个问题。
  • 我环顾四周,但没有看到任何好的答案。例如,这些不起作用:stackoverflow.com/questions/4043098/…

标签: javascript regex twitter


【解决方案1】:

这是我用来从 Twitter 状态中提取链接的正则表达式之一。

链接匹配模式

(?:<\w+.*?>|[^=!:'"/]|^)((?:https?://|www\.)[-\w]+(?:\.[-\w]+)*(?::\d+)?(?:/(?:(?:[~\w\+%-]|(?:[,.;@:][^\s$]))+)?)*(?:\?[\w\+%&=.;:-]+)?(?:\#[\w\-\.]*)?)(?:\p{P}|\s|<|$)

或者,如果您控制从 Twitter 获取状态的方式,您可以将 include_entities 参数传递给 statuses/show(或任何其他支持它的方法,例如 statuses/user_timeline)让 Twitter 断开链接、提及和主题标签,如下所示:

http://api.twitter.com/1/statuses/show/23918022347456512.json?include_entities=true

在生成的 JSON 中,注意 entities 对象。

"entities":{"urls":[{"expanded_url":null,"indices":[27,53],"url":"http:\/\/tinyurl.com\/38wp7nt"}],"hashtags":[],"user_mentions":[]}

现在,您可以引用从 Twitter 返回的数据,而不必自己解析。这种方法的最大好处是您可以将工作卸载到 Twitter,而不必担心您的正则表达式是否会与 Twitter 的完全匹配。

【讨论】:

    【解决方案2】:
    var stringToCheck = "http://www.something";
    
    stringToCheck.match(/^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$/); // returns true if stringToCheck is a URL
    

    这将检查两个或三个字母的 TLD 和子域帐户。

    【讨论】:

    • 我要检查的字符串是 Twitter 推文。因此,stringToCheck 类似于:“查看很棒的 something.com”或“www.something.com 很棒!”
    • stringToCheck.match(/\b(([\w-]+://?|www[.])[^\s()]+(?:([\w \d]+)|([^[:punct:]\s]|/)))/); // 如果 stringToCheck 是 URL,则返回 true
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2019-03-02
    • 2020-03-22
    相关资源
    最近更新 更多