Twitter状态URL regex

ssm49v7z  于 2023-10-22  发布在  其他
关注(0)|答案(6)|浏览(104)

我有一个现有的正则表达式:

/^http:\/\/twitter\.com\/(\w+)\/status(es)*\/(\d+)$/

我用它来判断一个URL是否是Twitter状态更新URL。Eg.

http://twitter.com/allWPthemes/status/2040410213974016

但自从“新”Twitter出现以来,他们已经改变了状态URL的外观:

http://twitter.com/#!/allWPthemes/status/2040410213974016

添加/#!
所以我的问题是如何修改正则表达式以匹配两个URL?
我最后一次失败的尝试是:

^http:\/\/twitter\.com\/(#!\/w+|\w+)\/status(es)*\/(\d+)$
3df52oht

3df52oht1#

试试这个:/^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(es)?\/(\d+)$/
这将匹配原始URL和新的哈希标签URL。
如果你只是想匹配新的URL,这应该可以做到:/^https?:\/\/twitter\.com\/#!\/(\w+)\/status(es)?\/(\d+)$/

6yt4nkrj

6yt4nkrj2#

已批准的答案将不匹配共享的Twitter URL,如下所示:https://twitter.com/USATODAY/status/982270433385824260?s=19因为字符串结束标志“$”

// working solution
/^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(es)?\/(\d+)/

测试:https://regex101.com/r/mNsp3o/4

vc6uscn9

vc6uscn93#

你的答案很接近。您可以简单地添加#!/作为可选元素,如下所示:

(#!\/)?

所以完整的正则表达式看起来像这样:

/^http:\/\/twitter\.com\/(#!\/)?(\w+)\/status(es)*\/(\d+)$/
2lpgd968

2lpgd9684#

Ewww!不要使用斜杠作为正则表达式的引号,当你有斜杠在里面,因此需要反击。否则,你会得到讨厌的LTS(倾斜牙签综合征)和一个传染性的情况下,背部slashitis的 Boot 。
像这样的东西要好得多:

m!http://twitter.com/(#!/)?\w+/status(es)?/(\d+)$!

m{http://twitter.com/(#!/)?\w+/status(es)?/(\d+)$}

或者如果你不需要捕获部分:

m{http://twitter.com/(?:#!/)?\w+/status(?:es)?/(?:\d+)$}

或者如果你想让它可读:

m{ http:// twitter.com / ( \x23 ! / )? \w+ / status (es)? / (\d+) $ }x

这是更好的时候,打破了多行,所以你可以评论它:

m{ 
           http:
        // twitter.com
        /  ( \x23 ! / )?       # optional new "#!" element
           \w+ 
        / status (es)?         # one or more statuses
        / ( \d+ ) 
          $
     }x
guz6ccqo

guz6ccqo5#

@Kevin回答更新了。

^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)(?:\/.*)?$

两者都匹配:

https://twitter.com/someone/status/866002913604149248
https://twitter.com/someone/status/857179125076963329/video/1

你可以在这里自己运行它们:
https://regex101.com/r/mNsp3o/3

2izufjch

2izufjch6#

**2023年更新:**随着新的所有权,看起来现在你将不得不使用

[(?:https?:\/\/(?:twitter|x)\.com)](\/(?:#!\/)?(\w+)\/status(es)?\/(\d+))

如果找到匹配项,则将https://x.com前置到匹配组1,以确保向前和向后兼容性。

相关问题