站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        僅1個(gè)例子輕松學(xué)習(xí)正則表達(dá)式

        正則表達(dá)式的語(yǔ)法就不多說(shuō)了,大家可以自己搜索查閱相關(guān)資料學(xué)習(xí)。本文所舉例子是在《JavaScript語(yǔ)言精粹》上看到的,看完之后對(duì)正則表達(dá)式有了進(jìn)一步的理解,故分享之。

        例子

          //這是一個(gè)用來(lái)匹配URL的正則表達(dá)式,分組獲取不同部分的信息  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/>");  }    //這段代碼的輸出結(jié)果如下:  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的各個(gè)部分,看看它是如何工作的:

        ^

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

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

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

        (/{0,3})

        這個(gè)因子是捕獲型分組2,匹配//。 /表示應(yīng),該匹配 / (斜杠)。它用 (反斜杠)來(lái)進(jìn)行轉(zhuǎn)義,這樣它就不會(huì)被錯(cuò)誤地解釋為這個(gè)正則表達(dá)式的結(jié)束符。后綴 {0,3} 表示 / 會(huì)匹配0~3次。

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

        這個(gè)因子是捕獲型分組3。它會(huì)匹配一個(gè)主機(jī)名,由一個(gè)或多個(gè)數(shù)字、字母以及 . 或 – 字符組成。- 會(huì)被轉(zhuǎn)義為 – 以防止與表示范圍的連字符相混淆。

        (?::(d+))?

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

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

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

        注意我在這里的處理是不嚴(yán)謹(jǐn)?shù)摹_@個(gè)類匹配除 ? 和 # 之外的所有字符,其中包括了行結(jié)束符、控制字符、以及其他大量不應(yīng)在此被匹配的字符。大多數(shù)情況下,它會(huì)按照我們的預(yù)期去做,但某些惡意文本可能會(huì)有滲漏進(jìn)來(lái)的風(fēng)險(xiǎn)。不嚴(yán)謹(jǐn)?shù)恼齽t表示式是一個(gè)常見(jiàn)的安全漏洞發(fā)源地。寫不嚴(yán)謹(jǐn)?shù)恼齽t表達(dá)式比寫嚴(yán)謹(jǐn)?shù)恼齽t表示式要容易的多。 

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

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

        (?:#(.*))?

        這個(gè)因子是以 # 開(kāi)始的可選分組。. 會(huì)匹配除行結(jié)束符以外的所有字符。

        $

        $表示這個(gè)字符串的結(jié)束。它保證在這個(gè)URL的尾部沒(méi)有其他更多的內(nèi)容了。

        通過(guò)這個(gè)簡(jiǎn)單例子,相信大家對(duì)正則表達(dá)式有了更進(jìn)一步的理解,祝大家學(xué)習(xí)愉快!

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 99香蕉国产精品偷在线观看| 99热精品毛片全部国产无缓冲| 亚洲精品私拍国产福利在线| 日韩精品一二三区| 色偷偷888欧美精品久久久| 嫩草伊人久久精品少妇AV| 精品久久人人爽天天玩人人妻| 亚洲人成国产精品无码| 国产精品秘入口福利姬网站| 99国产精品永久免费视频| 亚洲国产精品无码久久一区二区| www.久久精品| 亚洲AV无码成人网站久久精品大| 精品无人区麻豆乱码1区2区| 久久发布国产伦子伦精品| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 日韩av无码久久精品免费| 国产精品久久波多野结衣| 久久夜色精品国产噜噜麻豆| 亚洲欧美国产∧v精品综合网| 欧美亚洲国产成人精品| 大伊香蕉精品视频在线导航| 国产麻豆精品久久一二三| 久久免费的精品国产V∧| 人人妻人人澡人人爽欧美精品| 国产精品毛片a∨一区二区三区| 午夜精品乱人伦小说区| 91热成人精品国产免费| 丝袜美腿国产精品视频一区 | 91精品国产品国语在线不卡| 国产日韩一区在线精品欧美玲| 欧美精品在线免费| 免费精品国自产拍在线播放 | 午夜DY888国产精品影院| 亚洲精品97久久中文字幕无码| 欧美+亚洲+精品+三区| 久久国产精品成人免费| 天天爽夜夜爽精品视频app| 亚洲国产精品久久久久网站| 亚洲国产精品第一区二区| 国产精品186在线观看在线播放|