[英]How do I match URLs with regular expressions?
我們要檢查URL是否匹配mail.google.com或mail.yahoo.com(也接受它們的子域),但不檢查在問號后包含此字符串的URL。 我們也希望字符串“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)\\/
。 不區分大小寫。
^([-a-z]+://|^cid:|^//)([^/\?]+\.)?mail\.(google|yahoo)\.com/
應該做的把戲
第一個^
表示“匹配行首”,第二個取反允許的字符,因此使用斜杠/
不允許。
鈮。 您仍然必須轉義斜線,或將其用作new RegExp(string)
:
new RegExp('^([-a-z]+://|^cid:|^//)([^/\?]+\.)?mail\.(google|yahoo)\.com/')
怎么樣
^[a-z]+:\/\/([^.\/]+\.)*mail\.(google|yahoo).com\/
^
在字符串開頭錨定正則表達式
[az]+
匹配協議。 如果您需要一組特定的協議,則(https?|ftp)
可以完成工作
([^.\\/]+\\.)*
與次要部分匹配
好的,我發現它適用於:
var possibleURLs = /^([^\/\?]*\/){2}([^\.\/\?]+\.)*(mail\.google\.com|mail\.yahoo\.com)\//gi;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.