Javascript正则表达式仅适用于某些网站

时间:2012-02-14 23:38:45

标签: javascript regex youtube

我对正则表达式并不是很擅长,所以我希望有人可以提出一些适合我正在尝试做的事情,这是:

我希望它在以下情况下匹配(仅适用于youtube链接):

http://www.youtube.com/watch?v=oHg5SJYRHA0
www.youtube.com/watch?v=oHg5SJYRHA0
youtube.com/watch?v=oHg5SJYRHA0
http://youtu.be/oHg5SJYRHA0
www.youtu.be/oHg5SJYRHA0
youtu.be/oHg5SJYRHA0

同样在前三个示例中,它应匹配任何域名结尾,因此不仅仅是.com

虽然我问这个问题,但我也需要能够单独获取视频ID。

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

function getYoutubeId(str) {
    var check;
    check = /youtu.be\/(\w+)/.exec(str); 
    if(check) return check[1];
    check = /youtube\.com\/.*v=(\w+)/.exec(str); 
    if(check) return check[1];
    return null;
}

getYoutubeId("http://www.youtube.com/watch?v=oHg5SJYRHA0"); // oHg5SJYRHA0
getYoutubeId("www.youtube.com/watch?v=oHg5SJYRHA0"); // oHg5SJYRHA0
getYoutubeId("youtube.com/watch?v=oHg5SJYRHA0"); // oHg5SJYRHA0
getYoutubeId("http://youtu.be/oHg5SJYRHA0"); // oHg5SJYRHA0
getYoutubeId("www.youtu.be/oHg5SJYRHA0"); // oHg5SJYRHA0
getYoutubeId("youtu.be/oHg5SJYRHA0"); // oHg5SJYRHA0

getYoutubeId(""); // null
getYoutubeId("google.com"); // null
getYoutubeId("youtu.be/"); // null
getYoutubeId("youtube.com/?other=something"); // null

答案 1 :(得分:1)

这应该可以解决问题:

(?:http://)?(?:www\.)?youtu(?:\.be|be.com)/(?:watch\?v=)?([\d\w]+)

第一个捕获的组是视频ID。您可以在此处测试:http://www.regexr.com