我在做一个嵌入YouTube视频的正则表达式。
现在,这是我的基本工作:
http:\/\/www\.youtube\.com\/watch\?.*v=([a-z0-9-_]+)
它有正常的,公认的YouTube网址,然后匹配唯一的视频代码。不幸的是,这证明是要求太多我的用户。他们输入它错过了HTTP,错过了WWW,错过了HTTP和WWW,有时他们输入它取代/watch?v=* 与/v/*,在所有这些情况下,它打破了格式。
我想做的是允许在'youtube.com'之前和之后的任何内容,这样无论输入如何,它都将接近完美。
http://www.youtube.com/watch?v=([a-z0-9-_]+) --- the normal, unmolested input
http://youtube.com/watch?v=([a-z0-9-_]+) --- missing WWW
www.youtube.com/watch?v=([a-z0-9-_]+) --- missing HTTP
youtube.com/watch?v=([a-z0-9-_]+) --- missing HTTP and WWW
http://www.youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/
http://youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/ AND missing WWW
www.youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/ AND missing HTTP
youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/ AND missing HTTP and WWW
这是一个改变,我认为它应该工作(允许任何字符),但也许我错过了什么?
[.]+\youtube\.com\/[.]+([a-z0-9-_]+)
我很抱歉,如果我的模糊或无知,但我已经尝试了几个修改,它从来没有工作。也许我正在寻找的是不可能的。我已经诚实地尝试理解正则表达式,也许是它的小时,也许只是我,但我不能破译它。它超越了神秘的,从我的Angular 来看。
我真诚地感谢任何人谁抽出一分钟..
3条答案
按热度按时间wgx48brx1#
这个应该够了...
RegExr。
这将匹配URL,并将YouTube视频ID放入捕获组1。
它匹配一个可能的
http://
,然后是一个可能的www.
,然后总是youtube.com/
,然后匹配watch?v=
或v/
,然后匹配\w
字符类和-
。but5z9lq2#
在字符类中,
.
不是一个特殊字符,它的字面意思是一个点。[.]+
因此意味着“一个或多个点”。我不知道你可能有任何其他问题,但它应该是.+
(或者可能是.*
,因为“youtube”可以是字符串的开始)。zxlwwiss3#
我说我有类似东西
{e114dgfg084-4ddf1-21aea7}
和类似的东西:
{}
要同时捕获这两种情况:
另一种解决方案是