我正忙着创建两个正则表达式来过滤来自youtube和vimeo视频的id.我已经有了以下表达式;
YouTube: (youtube\.com/)(.*)v=([a-zA-Z0-9-_]+)
Vimeo: vimeo\.com/([0-9]+)$
正如我在下面解释的那样,有两种类型的网址与我已创建的正则表达式相匹配.来自Vimeo和YouTube的其他几种网址并未被表达所覆盖.我最喜欢的是所有这些都可以用两个表达式来涵盖.一个适用于所有Vimeo视频,一个适用于所有YouTube视频.我一直在忙着尝试一些不同的表达方式,但到目前为止还没有成功.我还在尝试掌握正则表达式,所以我希望我能以正确的方式来帮助我!如果需要更多信息,请告诉我!
VIMEO网址不匹配:
http://vimeo.com/channels/hd#11384488
http://vimeo.com/groups/brooklynbands/videos/7906210
http://vimeo.com/staffpicks#13561592
YOUTUBE网址不匹配
http://www.youtube.com/user/username#p/a/u/1/bpJQZm_hkTE
http://www.youtube.com/v/bpJQZm_hkTE
http://youtu.be/bpJQZm_hkTE
匹配的网址
http://www.youtube.com/watch?v=bWTyFIYPtYU&feature=popular
http://vimeo.com/834881
我们的想法是将上面提到的所有网址与两个正则表达式相匹配.一个用于vimeo,一个用于youtube.
在回答后更新Sedith:
这就是我的表达式现在的样子
public static readonly Regex VimeoVideoRegex = new Regex(@"vimeo\.com/(?:.*#|.*/videos/)?([0-9]+)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
public static readonly Regex YoutubeVideoRegex = new Regex(@"youtu(?:\.be|be\.com)/(?:(.*)v(/|=)|(.*/)?)([a-zA-Z0-9-_]+)", RegexOptions.IgnoreCase);
在我的代码中
var youtubeMatch = url.match(YoutubeVideoRegex );
var vimeoMatch = url.match(VimeoVideoRegex );
var youtubeIndex = (youtubeMatch.length - 1)
var youtubeId = youtubeMatch[youtubeIndex];
正如您所看到的,我现在需要找到videoId在数组中的索引,其中正则表达式返回匹配项.但我希望它只返回id本身,所以我不需要修改代码,当你的vimeo决定改变那里的网址时.关于这个的任何提示?