我创建了一个函数(使用 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.....
- 现在我正在做三个单独的匹配,尝试在一个表达式中完成所有事情是否有意义?如果是这样,如何?
2)现有的匹配是否可以更简洁?它们是否不必要地复杂?或者可能不够?
- 是否有任何无法解析的 YouTube 或 Vimeo URL?我已经尝试了很多,到目前为止它似乎工作得很好。
总结一下: 我只是在寻找改进上述功能的方法。任何意见是极大的赞赏。
原文由 Daniel 发布,翻译遵循 CC BY-SA 4.0 许可协议
我不确定你的问题 3),但只要你对 url 形式的归纳是正确的,正则表达式可以组合成一个,如下所示:
您将在不同的位置获得比赛(如果是 vimeo,则为第 1 和第 2 场比赛,如果是 youtube,则为第 3 场和第 4 场比赛),因此您只需要处理它。
或者,如果你非常确定 vimeo 的 id 只包含数字,那么你可以这样做:
提供者和 ID 将分别出现在第 1 场和第 2 场比赛中。