regex 正则表达式,匹配任何内容或不匹配任何内容?

06odsfpq  于 2022-11-26  发布在  其他
关注(0)|答案(3)|浏览(147)

我在做一个嵌入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 来看。
我真诚地感谢任何人谁抽出一分钟..

wgx48brx

wgx48brx1#

这个应该够了...

(?:http://)?(?:www\.)?youtube\.com/(?:watch\?v=|v/)([\w-]+)

RegExr
这将匹配URL,并将YouTube视频ID放入捕获组1。
它匹配一个可能的http://,然后是一个可能的www.,然后总是youtube.com/,然后匹配watch?v=v/,然后匹配\w字符类和-

but5z9lq

but5z9lq2#

在字符类中,.不是一个特殊字符,它的字面意思是一个点。[.]+因此意味着“一个或多个点”。我不知道你可能有任何其他问题,但它应该是.+(或者可能是.*,因为“youtube”可以是字符串的开始)。

zxlwwiss

zxlwwiss3#

我说我有类似东西

{e114dgfg084-4ddf1-21aea7}

和类似的东西:

{}

要同时捕获这两种情况:

{[0-9a-f\-]*}

另一种解决方案是

({}|{[a-zA-Z0-9\-]+})

相关问题