javascript - 改进用于解析 YouTube/Vimeo URL 的正则表达式

标签 javascript regex youtube vimeo

我创建了一个函数(用 JavaScript),它从 YouTube 或 Vimeo 获取一个 URL。它计算出该特定视频的提供者和 ID(演示:http://jsfiddle.net/csjwf/)。

function parseVideoURL(url) {

    var provider = url.match(/http:\/\/(:?www.)?(\w*)/)[2],
        id;

    if(provider == "youtube") {

        id = url.match(/http:\/\/(?:www.)?(\w*).com\/.*v=(\w*)/)[2];
    } else if (provider == "vimeo") {

        id = url.match(/http:\/\/(?:www.)?(\w*).com\/(\d*)/)[2];
    } else {
        throw new Error("parseVideoURL() takes a YouTube or Vimeo URL");    
    }
    return {
        provider : provider,
        id : id
    }
}

它有效,但是作为正则表达式新手,我正在寻找改进它的方法。我正在处理的输入通常如下所示:

http://vimeo.com/(id)
http://youtube.com/watch?v=(id)&blahblahblah.....

1) 现在我正在做三个单独的匹配,尝试在一个表达式中完成所有事情是否有意义?如果是,怎么办?

2) 现有的匹配可以更简洁吗?它们是否不必要地复杂?还是不够?

3) 是否有任何无法解析的 YouTube 或 Vimeo URL?我已经尝试了很多,到目前为止它似乎工作得很好。

总结:我只是在寻找改进上述功能的方法。非常感谢任何建议。

最佳答案

这是我对正则表达式的尝试,它涵盖了最新的案例:

function parseVideo(url) {
    // - Supported YouTube URL formats:
    //   - http://www.youtube.com/watch?v=My2FRPA3Gf8
    //   - http://youtu.be/My2FRPA3Gf8
    //   - https://youtube.googleapis.com/v/My2FRPA3Gf8
    // - Supported Vimeo URL formats:
    //   - http://vimeo.com/25451551
    //   - http://player.vimeo.com/video/25451551
    // - Also supports relative URLs:
    //   - //player.vimeo.com/video/25451551

    url.match(/(https?\/\/)(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
    var type = null;
    if (RegExp.$3.indexOf('youtu') > -1) {
        type = 'youtube';
    } else if (RegExp.$3.indexOf('vimeo') > -1) {
        type = 'vimeo';
    }

    return {
        type: type,
        id: RegExp.$6
    };
}

关于javascript - 改进用于解析 YouTube/Vimeo URL 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612602/

相关文章:

javascript - 如何从父对象获取对象的属性值

javascript - 什么是使用 html-php 的母版页

Java正则表达式与问号和单词边界完全匹配

javascript - 检测 Youtube 搜索事件

javascript - 如何在 YouTube 中创建企业专用私有(private) channel ?

javascript - 如何混合javascript和meteor来使用youtube api

javascript - 为什么这个侧边栏数据不会发送到 ajax,为什么 slider 值显示 ui 未定义?

python - 如何在 python 中获取一个单词后的数字

regex - 从 OCR 图像文件中提取文本

Javascript window.open 混淆参数?