【问题标题】:How to with extract url from tweet using Regular Expressions如何使用正则表达式从推文中提取 url
【发布时间】:2012-03-24 17:25:52
【问题描述】:

好的,我在 javascript 中执行以下代码行

RegExp('(http:\/\/t.co\/)[a-zA-Z0-9\-\.]{8}').exec(tcont);

其中 tcont 等于某个字符串,例如“Test tweet to http://t.co/GXmaUyNL”(由 jquery 获得的推文内容)。

但是它正在返回,例如在上面的例子中,'http://t.co/GXmaUyNL,http://t.co/'。

这令人沮丧,因为我希望网址末尾没有位 - 在逗号之后并包括逗号。

任何想法为什么会出现?谢谢

【问题讨论】:

标签: javascript regex twitter


【解决方案1】:

首先,去掉模式中的括号——它们是不必要的:

RegExp('http:\/\/t.co\/[a-zA-Z0-9\-\.]{8}').exec(tcont);

其次,正则表达式匹配返回一个匹配组的数组——你想要其中的第一项(整个匹配):

var match = RegExp('http:\/\/t.co\/[a-zA-Z0-9\-\.]{8}').exec(tcont);
if(match) {
    var result = match[0];
}

你有“最后的一部分”的原因是因为你的结果是实际上一个数组 - 你在表达式中的括号导致了一个额外的匹配组(它们周围的部分),即match[1]

【讨论】:

  • 太好了,非常感谢你 - 我对正则表达式的经验并不多,所以这真的很有帮助。
  • 我认为. 应该被转义。
  • @pimvdb 从技术上讲,是的,但由于 Twitter 上的所有 URL 都转换为 t.co URL,因此在这种情况下实际上并不重要。
  • @Amber:非常真实,我只是在吹毛求疵 :)
  • pimvdb 是绝对正确的:. 应该被转义。在正则表达式中,. 匹配单个字符。在这个特定示例中,它当然会匹配源中的文字 .。但是,正则表达式也会匹配 http://tico/GXmaUyNL(例如)。
【解决方案2】:

试试这个:RegExp('http:\/\/t\.co\/[a-zA-Z0-9\-\.]{8}').exec(tcont);

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多