如何将URL与正则表达式匹配?

时间:2014-12-09 08:23:21

标签: javascript regex

我们要检查网址是否与mail.google.com或mail.yahoo.com(也是其中的子域名)相匹配,但不是在问号后包含此字符串的网址。我们还希望字符串“mail.google.com”和“mail.yahoo.com”在URL的第三个斜杠之前出现,例如,https://mail.google.com/被接受,https://www.facebook.com/mail.google.com/不被接受,并且https://www.facebook.com/?mail=https://mail.google.com/也不被接受。 https://mail.google.com.au/也不被接受。是否可以使用正则表达式?

var possibleURLs = /^[^\?]*(mail\.google\.com|mail\.yahoo\.com)\//gi;
var url;
// assign a value to var url.
if (url.match(possibleURLs) !== null) {
    // Do something...
}

目前这将匹配https://mail.google.com/https://www.facebook.com/mail.google.com/,但我们不希望匹配https://www.facebook.com/mail.google.com/

修改:我希望匹配任何协议(任何不包含"?""/"的字符串),然后是斜杠"/"两次(字符串和斜杠都可以两次),然后任何不包含"?""/"的字符串(如果它不是空的,它必须以点"."结束),然后(mail\.google\.com|mail\.yahoo\.com)\/。不区分大小写。

4 个答案:

答案 0 :(得分:3)

不好笑 - 但为什么它必须是正则表达式?

是否有理由不使用URL(或Chrome和Safari中的webkitURL)简化流程 - URL constructor只需要一个字符串,然后包含每个部分的属性URL。它是否支持您想要支持的所有主机类型,我不知道。

当然,在此之后你可能仍然需要一个正则表达式(虽然你真的要检查主机名是否以yahoo.com或google.com结尾),但你只是在主机名上运行它URL对象而不是整个URI。

API并不是普遍存在,但似乎得到了相当好的支持,无论如何,如果这是客户端验证,那么我希望你也可以在服务器上检查它,因为回避javascript验证很容易。

答案 1 :(得分:1)

^([-a-z]+://|^cid:|^//)([^/\?]+\.)?mail\.(google|yahoo)\.com/

应该做的伎俩

第一个^表示"匹配行"的开头,第二个表示否定允许的字符,因此不允许使用斜杠/

的Nb。您仍然必须转义斜杠,或将其用作new RegExp(string)中的字符串:

new RegExp('^([-a-z]+://|^cid:|^//)([^/\?]+\.)?mail\.(google|yahoo)\.com/')

答案 2 :(得分:1)

怎么样

^[a-z]+:\/\/([^.\/]+\.)*mail\.(google|yahoo).com\/

Regex Example Link

  • ^将正则表达式锚定在字符串的开头

  • [a-z]+符合协议。如果您需要一组特定的协议,那么(https?|ftp)可以完成工作

  • ([^.\/]+\.)*匹配子主题部分

答案 3 :(得分:0)

好的,我发现它适用于:

var possibleURLs = /^([^\/\?]*\/){2}([^\.\/\?]+\.)*(mail\.google\.com|mail\.yahoo\.com)\//gi;