How do I get the YouTube video ID from a URL?
我想用javascript(没有jquery,纯javascript)从youtube的url获取
江户十一〔一〕号
埃多克斯1〔2〕
或任何其他YouTube格式,其中包含URL中的视频ID。
这些格式的结果埃多克斯1〔3〕
我对"jeffreypriebe"提供的regex做了一个增强,因为他需要一种YouTube的URL,当他们通过一个频道观看时,这个URL就是视频的URL。
不,但这是我所装备的功能。
1 2 3 4 5 6 | <script type="text/javascript"> function youtube_parser(url){ var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; var match = url.match(regExp); return (match&&match[7].length==11)? match[7] : false; } |
。
这些是支持的URL类型
1 2 3 4 5 6 7 | http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0 http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s http://www.youtube.com/embed/0zM3nApSvMg?rel=0 http://www.youtube.com/watch?v=0zM3nApSvMg http://youtu.be/0zM3nApSvMg |
可在[http://web.archive.org/web/20160926134334/]中找到。http://lasnv.net/foro/839/javascript_parsar_url_de_youtube
我把lasnv的答案简化了一点。
它还修复了WebDeb描述的错误。
这里是:
1 2 3 4 5 6 7 | var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; var match = url.match(regExp); if (match && match[2].length == 11) { return match[2]; } else { //error } |
。
这里有一个regexer链接可以用来玩:http://regexr.com/3dnqv
您不需要为此使用正则表达式。
1 2 3 4 5 | var video_id = window.location.search.split('v=')[1]; var ampersandPosition = video_id.indexOf('&'); if(ampersandPosition != -1) { video_id = video_id.substring(0, ampersandPosition); } |
截至2015年1月1日,这些都没有在厨房水槽上运行,尤其是没有Protocal HTTP/S和YouTube Nocookie域名的URL。所以这里有一个经过修改的版本,适用于所有这些不同的YouTube版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // Just the regex. Output is in [1]. /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/ // For testing. var urls = [ '//www.youtube-nocookie.com/embed/up_lNV-yoK4?rel=0', 'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo', 'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel', 'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub', 'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I', 'http://www.youtube.com/user/SilkRoadTheatre#p/a/u/2/6dwqZw0j_jY', 'http://youtu.be/6dwqZw0j_jY', 'http://www.youtube.com/watch?v=6dwqZw0j_jY&feature=youtu.be', 'http://youtu.be/afa-5HQHiAs', 'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo?rel=0', 'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel', 'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub', 'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I', 'http://www.youtube.com/embed/nas1rJpm7wY?rel=0', 'http://www.youtube.com/watch?v=peFZbP64dsU', 'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player', 'http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player', 'http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player' ]; var i, r, rx = /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/; for (i = 0; i < urls.length; ++i) { r = urls[i].match(rx); console.log(r[1]); } |
1 | /^.*(youtu.be\/|v\/|e\/|u\/\w+\/|embed\/|v=)([^#\&\?]*).*/ |
号
测试日期:
- http://www.youtube.com/v/0zm3napsvmg?fs=1&hl=en_-us&rel=0
- http://www.youtube.com/embed/0zm3napsvmg?Re= 0
- http://www.youtube.com/watch?V=0ZM3napsvmg&feature=feedRec_grec_索引
- http://www.youtube.com/watch?V=0ZM3napsvmg
- http://youtu.be/0zm3napsvmg
- http://www.youtube.com/watch?V=0ZM3napsvmg t=0m10s
- http://www.youtube.com/user/ingridmichaelsonvevo p/a/u/1/kdwsulmb8eq
- 网址:http://youtu.be/dqw4w9wgxcq
- http://www.youtube.com/embed/dqw4w9wgxcq
- http://www.youtube.com/v/dqw4w9wgxcq
- http://www.youtube.com/e/dqw4w9wgxcq
- http://www.youtube.com/watch?V=DQW4W9WGXCQ
- http://www.youtube.com/?V=DQW4W9WGXCQ
- http://www.youtube.com/watch?功能=播放器嵌入&v=dqw4w9wgxcq
- http://www.youtube.com/?功能=播放器嵌入&v=dqw4w9wgxcq
- http://www.youtube.com/user/ingridmichaelsonvevo p/u/11/kdwsulmb8eq
- http://www.youtube-nocookie.com/v/6l3zvimwzfm?版本=3&hl=en_US&rel=0
受另一个答案的启发。
我创建了一个函数来测试用户输入的YouTube、SoundCloud或Vimeo Embed ID,以便能够使用嵌入式媒体创建更连续的设计。此函数检测并返回具有两个属性的对象:"type"和"id"。类型可以是"youtube"、"vimeo"或"soundcloud","id"属性是唯一的媒体ID。
在这个站点上,我使用一个文本区域转储,用户可以在其中粘贴任何类型的链接或嵌入代码,包括vimeo和youtube的iframe嵌入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function testUrlForMedia(pastedData) { var success = false; var media = {}; if (pastedData.match('http://(www.)?youtube|youtu\.be')) { if (pastedData.match('embed')) { youtube_id = pastedData.split(/embed\//)[1].split('"')[0]; } else { youtube_id = pastedData.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0]; } media.type ="youtube"; media.id = youtube_id; success = true; } else if (pastedData.match('http://(player.)?vimeo\.com')) { vimeo_id = pastedData.split(/video\/|http:\/\/vimeo\.com\//)[1].split(/[?&]/)[0]; media.type ="vimeo"; media.id = vimeo_id; success = true; } else if (pastedData.match('http://player\.soundcloud\.com')) { soundcloud_url = unescape(pastedData.split(/value="/)[1].split(/["]/)[0]); soundcloud_id = soundcloud_url.split(/tracks\//)[1].split(/[&"]/)[0]; media.type ="soundcloud"; media.id = soundcloud_id; success = true; } if (success) { return media; } else { alert("No valid media id detected"); } return false; } |
。
鉴于YouTube有各种各样的URL样式,我认为Regex是更好的解决方案。这是我的正则表达式:
1 | ^.*(youtu.be\/|v\/|embed\/|watch\?|youtube.com\/user\/[^#]*#([^\/]*?\/)*)\??v?=?([^#\&\?]*).* |
号
第三组有你的YouTube ID
YouTube URL示例(当前包括"传统嵌入URL样式")-上面的regex适用于所有URL:
1 2 3 4 5 6 7 | http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0 http://www.youtube.com/embed/0zM3nApSvMg?rel=0 http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index http://www.youtube.com/watch?v=0zM3nApSvMg http://youtu.be/0zM3nApSvMg http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o |
拉斯诺帽尖
博士
匹配此问题的所有URL示例,然后匹配一些。
1 2 | let re = /^(https?:\/\/)?((www\.)?(youtube(-nocookie)?|youtube.googleapis)\.com.*(v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/)|youtu\.be\/)([_0-9a-z-]+)/i; let id ="https://www.youtube.com/watch?v=l-gQLqv9f4o".match(re)[7]; |
ID将始终位于匹配组7中。
我从这个问题的答案中获取的所有URL的实况示例:网址:https://regexr.com/3u0d4
完整解释:随着许多答案/评论的出现,YouTube视频URL有许多格式。即使是多个TLD,它们看起来都是"托管"的。
您可以通过上面的regexr链接查看我检查的变体的完整列表。
我们来分解regexp。
好的,下一部分是它的肉。基本上,我们有两种选择:www.youtu be.com/…[id]的不同版本和链接缩短了youtu.be/[id]版本。
1 2 3 4 5 6 7 8 9 | ( // Start a group which will match everything after the protocol and up to just before the video id. (www\.)? // Optional www. (youtube(-nocookie)?|youtube.googleapis) // There are three domains where youtube videos can be accessed. This matches them. \.com // The .com at the end of the domain. .* // Match anything (v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/) // These are all the things that can come right before the video id. The | character means OR so the first one in the"list" matches. | // There is one more domain where you can get to youtube, it's the link shortening url which is just followed by the video id. This OR separates all the stuff in this group and the link shortening url. youtu\.be\/ // The link shortening domain ) // End of group |
号
最后,我们让组选择视频ID。至少一个字符是数字、字母、下划线或破折号。
1 | ([_0-9a-z-]+) |
您可以通过在regexr链接上查找并查看表达式的每个部分如何与URL中的文本匹配来了解更多有关regex每个部分的详细信息。
在游戏后期,我将Mantish和J-W的两个出色的反应融合在一起。首先,修改后的regex:
1 | const youtube_regex = /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/ |
号
这是测试代码(我已经将Mantish的原始测试用例添加到了J-W的更低级的测试用例中):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | var urls = [ 'http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index', 'http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o', 'http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0', 'http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s', 'http://www.youtube.com/embed/0zM3nApSvMg?rel=0', 'http://www.youtube.com/watch?v=0zM3nApSvMg', 'http://youtu.be/0zM3nApSvMg', '//www.youtube-nocookie.com/embed/up_lNV-yoK4?rel=0', 'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo', 'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel', 'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub', 'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I', 'http://www.youtube.com/user/SilkRoadTheatre#p/a/u/2/6dwqZw0j_jY', 'http://youtu.be/6dwqZw0j_jY', 'http://www.youtube.com/watch?v=6dwqZw0j_jY&feature=youtu.be', 'http://youtu.be/afa-5HQHiAs', 'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo?rel=0', 'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel', 'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub', 'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I', 'http://www.youtube.com/embed/nas1rJpm7wY?rel=0', 'http://www.youtube.com/watch?v=peFZbP64dsU', 'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player', 'http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player', 'http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player', 'http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player' ]; var failures = 0; urls.forEach(url => { const parsed = url.match(youtube_regex); if (parsed && parsed[2]) { console.log(parsed[2]); } else { failures++; console.error(url, parsed); } }); if (failures) { console.error(failures, 'failed'); } |
号
用于处理评论中提到的m.youtube URL的实验版本:
1 | const youtube_regex = /^.*((m\.)?youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/ |
它要求在测试中的两个位置将
由于youtube视频ID设置为11个字符,我们只需在使用
1 2 3 | var sampleUrl ="http://www.youtube.com/watch?v=JcjoGn6FLwI&asdasd"; var video_id = sampleUrl.split("v=")[1].substring(0, 11) |
。
又好又简单:)
我发现(从2019年起)最好的解决方案是:
1 2 3 4 | function YouTubeGetID(url){ url = url.split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/); return (url[2] !== undefined) ? url[2].split(/[^0-9a-z_\-]/i)[0] : url[0]; } |
。
我在这里找到的。
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * Tested URLs: var url = 'http://youtube.googleapis.com/v/4e_kz79tjb8?version=3'; url = 'https://www.youtube.com/watch?feature=g-vrec&v=Y1xs_xPb46M'; url = 'http://www.youtube.com/watch?feature=player_embedded&v=Ab25nviakcw#'; url = 'http://youtu.be/Ab25nviakcw'; url = 'http://www.youtube.com/watch?v=Ab25nviakcw'; url = '<iframe width="420" height="315" src="http://www.youtube.com/embed/Ab25nviakcw" frameborder="0" allowfullscreen></iframe>'; url = '<object width="420" height="315"><param name="movie" value="http://www.youtube-nocookie.com/v/Ab25nviakcw?version=3&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param></embed></object>'; url = 'http://i1.ytimg.com/vi/Ab25nviakcw/default.jpg'; url = 'https://www.youtube.com/watch?v=BGL22PTIOAM&feature=g-all-xit'; url = 'BGL22PTIOAM'; */ |
Java代码:(为所有URL工作:
)
1 2 3 4 5 6 7 8 9 10 | String url ="http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index"; String regExp ="/.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)"; Pattern compiledPattern = Pattern.compile(regExp); Matcher matcher = compiledPattern.matcher(url); if(matcher.find()){ int start = matcher.end(); System.out.println("ID :" + url.substring(start, start+11)); } |
。
日常活动:
1 2 3 4 5 6 7 8 9 10 | String url ="http://www.dailymotion.com/video/x4xvnz_the-funny-crash-compilation_fun"; String regExp ="/video/([^_]+)/?"; Pattern compiledPattern = Pattern.compile(regExp); Matcher matcher = compiledPattern.matcher(url); if(matcher.find()){ String match = matcher.group(); System.out.println("ID :" + match.substring(match.lastIndexOf("/")+1)); } |
号
更严格的版本:
1 | ^https?://(?:www\.)?youtu(?:\.be|be\.com)/(?:\S+/)?(?:[^\s/]*(?:\?|&)vi?=)?([^#?&]+) |
号
测试日期:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | http://www.youtube.com/user/dreamtheater#p/u/1/oTJRivZTMLs https://youtu.be/oTJRivZTMLs?list=PLToa5JuFMsXTNkrLJbRlB--76IAOjRM9b http://www.youtube.com/watch?v=oTJRivZTMLs&feature=youtu.be https://youtu.be/oTJRivZTMLs http://youtu.be/oTJRivZTMLs&feature=channel http://www.youtube.com/ytscreeningroom?v=oTJRivZTMLs http://www.youtube.com/embed/oTJRivZTMLs?rel=0 http://youtube.com/v/oTJRivZTMLs&feature=channel http://youtube.com/v/oTJRivZTMLs&feature=channel http://youtube.com/vi/oTJRivZTMLs&feature=channel http://youtube.com/?v=oTJRivZTMLs&feature=channel http://youtube.com/?feature=channel&v=oTJRivZTMLs http://youtube.com/?vi=oTJRivZTMLs&feature=channel http://youtube.com/watch?v=oTJRivZTMLs&feature=channel http://youtube.com/watch?vi=oTJRivZTMLs&feature=channel |
号
我已经总结了所有的建议,下面是这个问题的普遍和简短的答案:
1 2 3 | if(url.match('http://(www.)?youtube|youtu\.be')){ youtube_id=url.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0]; } |
一个稍有变化的版本,从一个螳螂张贴:
1 2 3 4 | var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]{11,11}).*/; var match = url.match(regExp); if (match) if (match.length >= 2) return match[2]; // error |
这假设代码总是11个字符。我在actionscript中使用它,不确定JavaScript是否支持11,11。还添加了对&v=的支持…(以防万一)
再一个:
1 | var id = url.match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2] |
号
它可以处理这个线程中显示的任何URL。
当YouTube添加了一些其他11个base64字符的参数时,它将无法工作。在那之前,这是一个简单的方法。
Chris Nolet Cleaner的lasnv答案示例非常好,但我最近发现,如果你试图在文本中找到你的youtube链接,并在youtube URL后放置一些随机文本,那么regexp比需要的更匹配。改进的Chris Nolet回答:
1 | /^.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]{11,11}).*/ |
1 2 3 4 5 6 7 8 9 | function parser(url){ var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\/)|(\?v=|\&v=))([^#\&\?]*).*/; var match = url.match(regExp); if (match && match[8].length==11){ alert('OK'); }else{ alert('BAD'); } } |
号
用于测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | https://www.youtube.com/embed/vDoO_bNw7fc - attention first symbol ?v? in ?vDoO_bNw7fc? http://www.youtube.com/user/dreamtheater#p/u/1/oTJRivZTMLs https://youtu.be/oTJRivZTMLs?list=PLToa5JuFMsXTNkrLJbRlB--76IAOjRM9b http://www.youtube.com/watch?v=oTJRivZTMLs&feature=youtu.be https://youtu.be/oTJRivZTMLs http://youtu.be/oTJRivZTMLs&feature=channel http://www.youtube.com/ytscreeningroom?v=oTJRivZTMLs http://www.youtube.com/embed/oTJRivZTMLs?rel=0 http://youtube.com/v/oTJRivZTMLs&feature=channel http://youtube.com/v/oTJRivZTMLs&feature=channel http://youtube.com/vi/oTJRivZTMLs&feature=channel http://youtube.com/?v=oTJRivZTMLs&feature=channel http://youtube.com/?feature=channel&v=oTJRivZTMLs http://youtube.com/?vi=oTJRivZTMLs&feature=channel http://youtube.com/watch?v=oTJRivZTMLs&feature=channel http://youtube.com/watch?vi=oTJRivZTMLs&feature=channel |
号
我做了一个很小的函数,从下面可以看到的YouTube URL中提取视频ID。
1 2 3 4 5 6 7 8 | var videoId = function(url) { var match = url.match(/v=([0-9a-z_-]{1,20})/i); return (match ? match['1'] : false); }; console.log(videoId('https://www.youtube.com/watch?v=dQw4w9WgXcQ')); console.log(videoId('https://www.youtube.com/watch?t=17s&v=dQw4w9WgXcQ')); console.log(videoId('https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=17s')); |
号
此函数将提取视频ID,即使URL中有多个参数。
试试这个-
1 2 3 4 5 6 7 | function getYouTubeIdFromURL($url) { $pattern = '/(?:youtube.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?/ ]{11})/i'; preg_match($pattern, $url, $matches); return isset($matches[1]) ? $matches[1] : false; } |
。
我喜欢苏里亚的回答。只是一个不起作用的案例…
1 | String regExp ="/.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)"; |
不适用于
1 | youtu.be/i4fjHzCXg6c and www.youtu.be/i4fjHzCXg6c |
号
更新版本:
1 | String regExp ="/?.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)"; |
为所有人工作。
这肯定需要regex:
复制到Ruby IRB:
1 2 3 4 | var url ="http://www.youtube.com/watch?v=NLqASIXrVbY" var VID_REGEX = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/ \s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/ url.match(VID_REGEX)[1] |
号
所有测试用例请参见:https://gist.github.com/blairanderson/b264a15a8faaac9c6318
好吧,使用简单解析的方法是:从第一个=符号之后开始到第一个&符号。
我认为他们有一个相似的答案:
使用javascript解析Vimeo ID?
简单的regex如果你有完整的URL,保持简单。
1 2 | results = url.match("v=([a-zA-Z0-9]+)&?") videoId = results[1] // watch you need. |
。
1 2 3 4 5 6 7 8 9 10 11 12 13 | var video_url = document.getElementById('youtubediv').value; if(video_url!=""){ ytid(video_url); document.getElementById("youtube").setAttribute("src","http://www.youtube.com/embed/"+ytid(video_url)); } function ytid(video_url){ var video_id = video_url.split('v=')[1]; var ampersandPosition = video_id.indexOf('&'); if(ampersandPosition != -1) { video_id = video_id.substring(0, ampersandPosition); } return video_id; } |
。
我希望能有帮助
1 2 3 4 | function youtube_parser(url){ var match = url.match(/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/); return (match&&match[7].length==11)?match[7]:false; } |
。
最短有效
正如评论中提到的Webstrap:
It worked if the video start with"v" and it's from youtu.be
The regex contains a little bug
\??v?=? this should just be at the
watch part, otherwise you would filter a'v' if the id starts with a
'v' . so this should do the trick
/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\??v?=?))([^#\&\?]*).*/
号
我对Mantish的regex做了一些细微的更改,以包括J W和Matx答案中的所有测试用例;因为它最初并不适用于所有的测试用例。可能还需要进一步的修改,但据我所知,这至少涵盖了大多数链接:
?#]+)/
1 2 3 4 5 6 7 8 9 10 11 | var url = ''; // get it from somewhere var youtubeRegExp = /(?:[?&]vi?=|\/embed\/|\/\d\d?\/|\/vi?\/|https?:\/\/(?:www\.)?youtu\.be\/)([^& ?#]+)/; var match = url.match( youtubeRegExp ); if( match && match[ 1 ].length == 11 ) { url = match[ 1 ]; } else { // error } |
号
进一步测试:
http://regexr.com/3fp84
在C中,它看起来如下:
1 2 3 4 5 6 7 8 9 10 11 12 | public static string GetYouTubeId(string url) { var regex = @"(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?|watch)\/|.*[?&]v=)|youtu\.be\/)([^""&?\/ ]{11})"; var match = Regex.Match(url, regex); if (match.Success) { return match.Groups[1].Value; } return url; } |
。
请随意修改。
您可以使用以下代码从URL获取YouTube视频ID:
1 2 3 4 | url ="https://www.youtube.com/watch?v=qeMFqkcPYcg" VID_REGEX = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/ \s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/ alert(url.match(VID_REGEX)[1]); |
号
我们认识这些人物?v="cannot be appear more than one but‘v’can be appear more in the id itself so we use"?v="作为分隔符。看它在这里工作
1 2 3 4 5 6 7 8 9 10 11 12 | //Get YouTube video Id From Its Url $('button').bind('click',function(){ var url='http://www.youtube.com/watch?v=u8nQa1cJyX8', videoId = url.split('?v='),//Split data to two YouTubeVideoId=videoId[1]; alert(YouTubeVideoId);return false; }); <button>Click ToGet VideoId</button> |
。
1 | videoId = videoUrl.split('v=')[1].substring(0,11); |