使用或不使用RegEx提取YouTube ID [英] Extract YouTube ID with or without RegEx
问题描述
请让我知道如何在不使用正则表达式的情况下获取youtube ID?
在网址后使用上述方法,无效
Please let me know how to get youtube ID without going to regular expression?
Using above method following URL, didn't work
http://www.youtube.com/e/dQw4w9WgXcQ
http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ
public static String extractYTId(String youtubeUrl) { String video_id = ""; try { if(youtubeUrl != null && youtubeUrl.trim().length() > 0 && youtubeUrl.startsWith("http")) { String expression = "^.*((youtu.be" + "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; // var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; //String expression = "^.*(?:youtu.be\\/|v\\/|e\\/|u\\/\\w+\\/|embed\\/|v=)([^#\\&\\?]*).*"; CharSequence input = youtubeUrl; Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); if(matcher.matches()) { String groupIndex1 = matcher.group(7); if(groupIndex1 != null && groupIndex1.length() == 11) video_id = groupIndex1; } } } catch(Exception e) { Log.e("YoutubeActivity", "extractYTId " + e.getMessage()); } return video_id; }
Other links working fine
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://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
http://www.youtube.com/embed/dQw4w9WgXcQ
http://www.youtube.com/v/dQw4w9WgXcQ
http://www.youtube.com/watch?v=dQw4w9WgXcQ
http://www.youtube-nocookie.com/v/6L3ZvIMwZFM?version=3&hl=en_US&rel=0
解决方案You can use following RegEx
RegEx Breakup:
^
: Start of the line anchor(?:(?:https?:\/\/)?(?:www\.)?)?
:
(?:https?:\/\/)?
: Matchhttp://
orhttps://
optionally(?:www\.)?)?
: Matchwww.
zero or one time(youtube(?:-nocookie)?\.com|youtu\.be)\/
: Match either
youtube.com
oryoutube-nocookie.com
oryoutu.be
followed by/
.*?
: Lazy match. Match until the next pattern satisfies.(?:embed|e|v|watch\?.*?v=)?\/?
:
(?:embed|e|v|watch\?.*?v=)?
: Matchembed
ore
orv
or fromwatch?
tov=
or nothing\/?
: Match/
zero or one time([a-z0-9]+)
: Match one or more alphanumeric characters and add that in the captured group.Live DemoUsing JavaScript
var regex = /^(?:(?:https?:\/\/)?(?:www\.)?)?(youtube(?:-nocookie)?\.com|youtu\.be)\/.*?(?:embed|e|v|watch\?.*?v=)?\/?([a-z0-9]+)/i; // An array of all the youtube URLs var youtubeLinks = [ 'http://www.youtube.com/e/dQw4w9WgXcQ', 'http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ', '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://youtu.be/dQw4w9WgXcQ', 'http://www.youtube.com/embed/dQw4w9WgXcQ', 'http://www.youtube.com/v/dQw4w9WgXcQ', 'http://www.youtube.com/watch?v=dQw4w9WgXcQ', 'http://www.youtube-nocookie.com/v/6L3ZvIMwZFM?version=3&hl=en_US&rel=0' ]; // An object to store the results var youtubeIds = {}; // Iterate over the youtube URLs youtubeLinks.forEach(function(url) { // Get the value of second captured group to extract youtube ID var id = "<span class='youtubeId'>" + (url.match(regex) || [0, 0, 'No ID present'])[2] + "</span>"; // Add the URL and the extracted ID in the result object youtubeIds[url] = id; }); // Log the object in the browser console console.log(youtubeIds); // To show the result on the page document.getElementById('output').innerHTML = JSON.stringify(youtubeIds, 0, 4);
.youtubeId { color: green; font-weight: bold; }
<pre id="output"></pre>
这篇关于使用或不使用RegEx提取YouTube ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!