正则表达式,用于匹配字符串开头的协议相对 URL
RegExp for matching protocol relative URL at beginning of string
我正在编写一个简短的动态脚本,确保URL以以下任一开头:
- http
- https
- 没有 http/https,而只是 // 技术
到目前为止,我的正则表达式:
/^(http|https|://)youtube.com|vimeo.com.*$/
所以我可以给它:
-
http://youtube.com
-
https://youtube.com
-
//youtube.com
。它会起作用
我知道它快到了,但是我怎样才能让它在字符串的开头说"http/https 或只是斜杠斜杠"?然后是这些 URL 之后的任何内容。
如果你想知道你的正则表达式出了什么问题,这里有一个解释:
/^(http|https|://)youtube.com|vimeo.com.*$/
第一件事是:你需要将youtube|vimeo部分封装成一个组(我们会在前面添加?:
,因为我们不想捕获它)。 否则它实际上是在寻找(^(http|https|://)youtube.com)|(vimeo.com)
,这根本不是你想要的。此外,你会想要转义你的月经,因为这是点字符(我假设你不希望"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?:)?'/'/(?:youtube|vimeo)'.com.*$/i
- 我可以获得相对于被点击元素的确切点击位置吗
- 固定位置菜单时滚动,直到它击中一个相对容器的底部
- 可以用'吗/'在相对路径中
- 在不设置协议的情况下,使用javascript/jquery更改iframe-src
- JavaScript:单击时相对于父级增加变量值
- 在不移动元件的情况下从相对位置更改为固定位置
- 打开相对于鼠标位置的CSS3/HTML5模式对话框
- 抵消在具有pageY计算的相对容器中位于顶部
- 是否可以通过Chrome扩展内容脚本打开Chrome外部协议请求
- Chrome原生拖放相对容器并不能正确渲染重影
- 如何确定相对较新版本的IE的高度和宽度(IE8不喜欢从JavaScript设置这种样式吗?
- 绝对链接/相对链接均未获胜't在菜单中工作
- 相对于角度控制器中的另一个阵列过滤阵列项目
- Javascript元素相对于屏幕的位置
- 使用systemJS的相对动态加载,使用ES6/Babel语法
- 块相对于父对象的位置
- 如何创建js常量对象与"依赖/相对;价值观
- 正则表达式,用于匹配字符串开头的协议相对 URL
- 使用本机输入类型=“date” 的 jQuery UI 的协议相对 URL 方法
- 本地调试包含协议相对url的网页的提示