2016-03-07 87 views
0

我有這個正則表達式,它從字符串中提取域名。正則表達式來獲得不同協議的域

var matches = str.match(/^https?\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/i); 

我想要相同的正則表達式,包括其他協議如rstp。例如:

"http://www.example.com/a/".match(/^https?\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/i) 

結果:["http://www.example.com/", "www.example.com"]

我已經試過這樣:

"http://www.example.com/a/".match(/^(http|https|rtsp)\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/i) 

但它返回的HTTP太:["http://www.example.com/", "http", "www.example.com"]

我想相同的輸出。

謝謝。

回答

2

你只需要通過?:前綴它把你的協議交替的組成非捕獲組:

"http://www.example.com/a/".match(/^(?:http|https|rtsp)\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/i) 
//["http://www.example.com/", "www.example.com"] 
+0

哇這麼簡單,它的工作原理就像一個魅力! –