如果你想知道什么地方错了你的正则表达式,这里有一个解释:
/^(http|https|://)youtube.com|vimeo.com.*$/
第一件事的第一条:您需要封装在YouTube | vimeo部分作为一个组(我们将?:
添加到前面,因为我们不想捕获它)。否则它实际上是在寻找(^(http|https|://)youtube.com)|(vimeo.com)
这不是你想要的。此外,你会想逃避你的时间,因为这是一个dotall角色(我假设你不想让“youtubescom”匹配)以及你的正斜杠。
现在,我们有:
/^(http|https|:\/\/)(?:youtube\.com|vimeo\.com).*$/
所以,在这里我们检查,看看是否 “HTTP”, “HTTPS” 或 “://” 开头的字符串和出现在“youtube.com”或“vimeo.com”之前。但是,我们真正想要的是检查是否 “的http://”, “https://开头” 或只是 “//” 之前谈到之一:
/^(http:\/\/|https:\/\/|\/\/)(?:youtube\.com|vimeo\.com).*$/
您可以停止那是你的答案。但是,让我们继续通过查找冗余进行一些清理。首先,我们的两个域名都有“.com”,因此我们可以简单地将该部分设为(?:youtube|vimeo)\.com
。接下来,我们的协议前缀都有“//”,所以我们可以将其提供给:(http:|https:)\/\/
。但是,现在“http:”或“https:”必须启动字符串。既然我们希望这些是可选的,那么之后我们将添加一个“?”,所以我们得到(http:|https:)?\/\/
。现在,因为那些非常接近,我们真正想要的是对于ssl,可选的“s”。最后,我们终于可以得到:
/^(https?:)?\/\/(?:youtube|vimeo)\.com.*$/
'/ ^(HTTPS:?)?\/\ /'... – pawel