站長資訊網
        最全最豐富的資訊網站

        僅1個例子輕松學習正則表達式

        正則表達式的語法就不多說了,大家可以自己搜索查閱相關資料學習。本文所舉例子是在《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 result = parse_url.exec(url);  var names = ["url", "scheme", "slash", "host", "port", "path", "query", "hash"];var i;  for (i = 0; i < names.length; i++) {   document.writeln(names[i] + ": " + result[i] + "<br/>");  }    //這段代碼的輸出結果如下:  url: http://www.ora.com:80/goodparts?q#fragment  scheme: http  slash: //  host: www.ora.com  port: 80  path: goodparts  query: q  hash: fragment    

        解析
        下面讓我們分解parse_url的各個部分,看看它是如何工作的:

        ^

        ^字符表示此字符串的開始,它是一個錨,指引exec不要跳過那些不像URL的前綴,只匹配那些從開頭就像URL一樣的字符串。

        (?:([A-Za-z]+):)?

        這個因子匹配一個協議名,但僅當它后面跟隨一個 :(冒號)的時候才匹配。(?: . . .)表示一個非捕獲型分組(noncapturing group)。后綴 ? 表示這個分組是可選的,它表示重復0次或1次。( . . .)表示一個捕獲型分組。一個捕獲型分組會復制它所匹配的文本,并把其放到result數組里。每個捕獲型分組都會被指定一個編號。第一個捕獲型分組的編號是1,所以該分組所匹配的文本副本會出現在result[1]中。 [ . . .]表示一個字符類。A-Za-z這個字符類包含26個大寫字母和26個小寫字母。連接字符 – 表示范圍從A-Z。后綴 + 表示這個字符類會被匹配一次或多次。這個組后面跟著字符 : ,它會按字面進行匹配。 

        (/{0,3})

        這個因子是捕獲型分組2,匹配//。 /表示應,該匹配 / (斜杠)。它用 (反斜杠)來進行轉義,這樣它就不會被錯誤地解釋為這個正則表達式的結束符。后綴 {0,3} 表示 / 會匹配0~3次。

        ([0-9.-A-Za-z]+)

        這個因子是捕獲型分組3。它會匹配一個主機名,由一個或多個數字、字母以及 . 或 – 字符組成。- 會被轉義為 – 以防止與表示范圍的連字符相混淆。

        (?::(d+))?

        這個可選的因子匹配端口號,它是由一個前置 : 加上一個或多個數字而組成的序列。d表示一個數字字符。一個或多個數字組成的數字串會被捕獲型分組4捕獲。

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

        這個因子也是可選的分組,匹配路徑。該分組以一個 / 開始。之后的字符類[^?#]以一個^開始,它表示這個類包含除 ? 和 # 之外的所有字符。* 表示這個字符類會被匹配0次或多次。

        注意我在這里的處理是不嚴謹的。這個類匹配除 ? 和 # 之外的所有字符,其中包括了行結束符、控制字符、以及其他大量不應在此被匹配的字符。大多數情況下,它會按照我們的預期去做,但某些惡意文本可能會有滲漏進來的風險。不嚴謹的正則表示式是一個常見的安全漏洞發源地。寫不嚴謹的正則表達式比寫嚴謹的正則表示式要容易的多。 

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

        這個因子是一個以一個 ? 開始的可選分組。它包含捕獲型分組6,這個分組包含0個或多個非#字符。

        (?:#(.*))?

        這個因子是以 # 開始的可選分組。. 會匹配除行結束符以外的所有字符。

        $

        $表示這個字符串的結束。它保證在這個URL的尾部沒有其他更多的內容了。

        通過這個簡單例子,相信大家對正則表達式有了更進一步的理解,祝大家學習愉快!

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品亚洲专区无码WEB| 久久噜噜久久久精品66| 精品一区二区三区在线观看 | 国产精品嫩草影院一二三区| 精品福利一区二区三区免费视频| 麻豆国产高清精品国在线| 在线人成精品免费视频| 久久精品国产亚洲av日韩| 亚洲精品第一国产综合精品99 | 久久免费精品视频| 久久精品无码一区二区无码 | 亚洲一区二区三区国产精品| 久久精品国产一区二区| Aⅴ精品无码无卡在线观看| 久久91精品国产91久久小草| 国内精品伊人久久久久av一坑| 亚洲精品自在在线观看| 午夜精品久久久久9999高清| 精品第一国产综合精品蜜芽| 亚洲国产精品一区| 欧美精品国产日韩综合在线| 91久久精品91久久性色| 精品无码国产自产拍在线观看| 亚洲精品亚洲人成人网| 久久久久久国产精品无码下载| 国产在线观看高清精品| 亚洲欧洲精品成人久久曰影片| 国精品午夜福利视频不卡麻豆| 亚洲精品成人网站在线观看| 综合精品欧美日韩国产在线| 亚洲精品456播放| 亚洲精品专区在线观看| 欧美精品整片300页| 欧美精品一区二区三区免费| 巨大黑人极品VIDEOS精品| 麻豆国产精品VA在线观看不卡| 久久久这里有精品中文字幕| 亚洲国产精品狼友中文久久久| 无码日韩精品一区二区人妻 | 97人妻无码一区二区精品免费| 国产精品污WWW在线观看|