我有一个现有的正则表达式:
/^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+)$
6条答案
按热度按时间3df52oht1#
试试这个:
/^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(es)?\/(\d+)$/
这将匹配原始URL和新的哈希标签URL。
如果你只是想匹配新的URL,这应该可以做到:
/^https?:\/\/twitter\.com\/#!\/(\w+)\/status(es)?\/(\d+)$/
6yt4nkrj2#
已批准的答案将不匹配共享的Twitter URL,如下所示:https://twitter.com/USATODAY/status/982270433385824260?s=19因为字符串结束标志“$”
测试:https://regex101.com/r/mNsp3o/4
vc6uscn93#
你的答案很接近。您可以简单地添加
#!/
作为可选元素,如下所示:所以完整的正则表达式看起来像这样:
2lpgd9684#
Ewww!不要使用斜杠作为正则表达式的引号,当你有斜杠在里面,因此需要反击。否则,你会得到讨厌的LTS(倾斜牙签综合征)和一个传染性的情况下,背部slashitis的 Boot 。
像这样的东西要好得多:
或
或者如果你不需要捕获部分:
或者如果你想让它可读:
这是更好的时候,打破了多行,所以你可以评论它:
guz6ccqo5#
@Kevin回答更新了。
两者都匹配:
你可以在这里自己运行它们:
https://regex101.com/r/mNsp3o/3
2izufjch6#
**2023年更新:**随着新的所有权,看起来现在你将不得不使用
如果找到匹配项,则将
https://x.com
前置到匹配组1,以确保向前和向后兼容性。