url正則

用來匹配URL的正則表達式:

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

解釋:

(?:([A-Za-z]+):)?   當它之後跟隨一個:(冒號)的時候才匹配。

(?:   )表示一個非捕獲型分組,不捕獲匹配結果。後綴?表示這個分組是可選的(表示重複01次)。

    (    )表示一個捕獲型分組,後綴+表示這個字符類至少匹配1

(\/{0,3})  \(反斜槓)轉義,獲得/ 03

([0-9.\-A-Za-z]+) 捕獲型分組,匹配一個主機名,捕獲1個或多個 數字、字母或.-

(?: :(\d+))? \d表示一個數字

(?:\/([^?#]*))?    /開始,之後的[^?#]中 ^是“非”的意思。 *表示0個或多個。

(?:\?([^#]*))?

(?:#(.*))?

 

關於非捕獲:

匹配2015-04-21,你可以用\d{4}-\d{2}-\d{2},你也可以加個括號(\d{4})-(\d{2})-(\d{2}),意思是完全一樣的,但加了括號,就意味括號裏面的東西,你捕獲到了,你可以再使用,這就是捕獲組的概念

上面這種情況,你是沒必要加括號,但是,有時候你必不得已要加括號,比如說匹配1-100的數字,你會用^([1-9]?[0-9]|100)$,但是這個時候,會默認把括號裏的東西捕獲過來以供你下次使用,其實,你只是用着正則匹配而已,因此就造成了內存浪費,當正則複雜時,效率更加低下,因此纔有了非捕獲組,上面的就可以改寫成^(?:[1-9]?[0-9]|100)$

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章