1. 程式人生 > >匹配url的正則表達式

匹配url的正則表達式

rip pan length exe pat blank string blog doc

在javascript語言精粹 看到url的正則,將其記錄下來

var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;

var url = "http://www.ora.com:80/goodparts?q#fragment";

執行 具體代碼見下述:

var url = "http://www.ora.com:80/goodparts?q#fragment";
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var result = parse_url.exec(url);
var names = [‘url‘,‘scheme‘,‘slash‘,‘host‘,‘port‘,‘path‘,‘query‘,‘hash‘];
var blanks = ‘ ‘;
var i;
for (i = 0; i < names.length; i += 1){
  document.writeln(names[i] + ‘:‘ + blanks.substring(names[i].length), result[i]);
}

執行結果:

url: http://www.ora.com:80/goodparts?q#fragment
scheme: http
slash: //
host: www.ora.com
port: 80
path: goodparts
query: q
hash: fragment

關於上述url的正則的部分解釋:

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

1.^表示開始 $表示結尾

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

2. (?:pattern) 表示匹配pattern但不獲取匹配結果

(?:([A-Za-z]+):) 則表示匹配 ([A-Za-z]+): ,但只返回匹配到的([A-Za-z]+)的結果,並不返回:

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

3. \*{3},因為*是特殊字符,所以用轉義字符,該表達式表示匹配3個*,即***

同理\/{0,3}表示匹配0到3個/,即沒有/或者/, //, ///

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]

*))?(?:\?([^#]*))?(?:#(.*))?$/

4. 方括號中的^表示 非 的意思

[^?#] 則表示 非 ? 且 非 # 的其他字符

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

* 匹配前一項0次或多次。即{0,}

?匹配前一項0次或1次。即{0,1}

匹配url的正則表達式