基本上,视频ID是由v=
之前,并随后任所述字符串的末尾,或&
。所以,你要寻找的正则表达式很简单:
var expr = /(?:v=)([^&]+)/;
console.log('http://www.youtube.com/watch?v=9bZkp7q19f0&desc=gangnam'.match(expr)[1]);
//logs "9bZkp7q19f0"
console.log('http://www.youtube.com/watch?desc=gangnam&v=9bZkp7q19f0'.match(expr)[1]);
//logs "9bZkp7q19f0"
你可以(但它不是真正需要的),请务必只在满弦遵循一个?
的URI(位符合上述模式:
var expr = /\?.*(?:v=)([^&]+)/;
你试过被充满了故障,并开始固定,这只是工作太多了,我只是忘记它例如模式:
/youtu.be/
匹配人iteral youtu
后跟的任意一个字符(不是新行)(.
),后面跟着字面be
。因此,它匹配youtu2be
,youtu#be
,youtu.be
,甚至youtu be
在回答您的评论:
expr = /(youtu\.be\/|[?&]v=)([^&]+)/;
console.log('http://www.youtu.be/9bZkp7q19f0'.match(expr)[2]);
//logs "9bZkp7q19f0"
console.log('http://www.youtube.com/watch?desc=gangnam&v=9bZkp7q19f0'.match(expr)[2]);
//logs "9bZkp7q19f0"
console.log('http://youtu.be/9bZkp7q19f0'.match(/(youtu\.be\/|v=)([^&]+)/)[2]);
//logs "9bZkp7q19f0"
console.log(' youtube.com/watch?argv=xyz&v=u8nQa1cJyX8'.match(/(youtu\.be\/|[?&]v=)([^&]+)/)[2]);
//logs "u8nQa1cJyX8"
这就是全部。不需要检查前面的内容吗?或& ...
它是如何工作:
(youtu\.be\/|[?&]v=)
:匹配要么文字youtu.be/
或要么?v=
或&v=
([^&]+)
:遵循以前的比赛,除了&
比赛(和组)的一切
这意味着那youtu.be/<thiswillmatch>&<this will not match>
和youtube.com/foo/bar/watch?some=params&v=<this will match>&<this won't>
。不要紧,如果?
后或符号后v=
位是直接,这一切正则表达式是感兴趣的是发现v=
,并匹配everythign跟随,直到后面的第一个&
。如果找不到v=
,但找到youtu.be/
,则正则表达式将捕获正斜杠后的所有内容(即vid id)
这对于像这样的url不起作用http://youtu.be/9bZkp7q19f0',你可以请建议我如何改变现有的正则表达式部分'?v ='来说明'v'前面带有&符号的情况吗? – user784637
我问了一个非常具体的问题,即正确的语法是如何改变正则表达式的部分'?v ='来解释和符号。我敢肯定,这个改变大约需要2个字符。你知道正确的语法是什么吗? – user784637
@ user784637:是的,但我说你正在做很多工作。我已经添加了一个替代方法,更短的正则表达式,做同样的事情...为什么不使用它?但无论如何,'watch \?'尝试'观看\?。*(?: v =)([^&] +)',处理主要放大器和问号 –