僅1個例子輕鬆學習正規表示式
正規表示式的語法就不多說了,大家可以自己搜尋查閱相關資料學習。本文所舉例子是在《JavaScript語言精粹》上看到的,看完之後對正規表示式有了進一步的理解,故分享之。
例子
//這是一個用來匹配URL的正規表示式,分組獲取不同部分的資訊 var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; var url = " 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: scheme: http slash: // host: 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的尾部沒有其他更多的內容了。
通過這個簡單例子,相信大家對正規表示式有了更進一步的理解,祝大家學習愉快!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015107/viewspace-2882758/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 5分鐘輕鬆學正規表示式
- 在實際例子中學習正規表示式(高效率)
- Go 正規表示式學習Go
- 正規表示式學習筆記(1)-認識正則筆記
- 正規表示式學習和練習
- 正規表示式學習筆記筆記
- 如何快速學習正規表示式
- 正規表示式入門學習
- 正規表示式例項蒐集,通過例項來學習正規表示式。
- 通過js正規表示式例項學習正規表示式基本語法JS
- Day1-學習筆記-js之正規表示式筆記JS
- Python學習筆記 - 正規表示式Python筆記
- java 正規表示式語法學習Java
- 正規表示式學習(2)---字元特性字元
- 學習正規表示式(js、C#)JSC#
- Oracle 正規表示式函式-REGEXP_REPLACE 使用例子Oracle函式
- 正規表示式複習
- 正規表示式(初學)
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- 正規表示式re.compile的學習Compile
- js正規表示式基本語法學習JS
- 從 Vue parseHTML 來學習正規表示式VueHTML
- 軟體測試之30分鐘輕鬆搞定正規表示式基礎
- js中的正規表示式(1)JS
- Python學習筆記|Python之正規表示式Python筆記
- learn-regex:正規表示式學習資源
- js加固之正規表示式學習筆記JS筆記
- python 中的正規表示式學習筆記Python筆記
- 正規表示式
- 正規表示式.
- 20個實用正規表示式
- 工作學習筆記(二) 正規表示式(轉載)筆記
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- php –正規表示式PHP
- 【Linux】正規表示式Linux
- 【JavaScript】正規表示式JavaScript
- URL正規表示式
- 正規表示式 split()