最近參加了百度ife的前端培訓,在完成task0002的過程中要求學會正則表達式,曾經在javascript的教學圖書中有看過正則表達式,但都講的不夠系統,自己也不夠重視,所以就幾乎是正則表達式零基礎。於是花了不到一個晚上的時間把《入門正則表達式》看完了,一百多頁,比網上的大多數教程系統,入門足矣。
首先推薦兩個在線測試正則的網站,邊學邊測試反復實踐當然學的更快了。
http://regexpal.com/
http://regexr.com/
個人更喜歡用第二個,功能更加齊全,而且界面更美觀一些。
MDN正則表達式 這個這教程結合書使用效果更加。
以下是我在Evernote上整理的讀書筆記,由於是按自己學習的狀態整理所以有些簡單不系統,更加建議看書:
元字符(metacharacter)是在正則表達式中有特殊含義的字符,也是保留字符。[0-9]這種形式的正則表達式稱作字符組(character class)。
\d可以像[0-9]一樣匹配任意阿拉伯數字這種正則表達式叫做字符組簡寫式(character shorthand),也叫轉義字符(character escape)。
使用\D匹配任何一個非數字字符,會匹配空格,字母和標點符號。
.是一個通配符,可以匹配任意字符(但某些情況下不能匹配行起始符)。
脫字符^匹配行起始位置
美元$匹配行結束位置
豎線符|表示選擇,也就是從多個可選項中選擇一個。
\w只匹配字母,數字,下划線
x(?=y) 匹配’x’僅僅當’x’后面跟着y 正向肯定查找
x(?!y) 匹配’x’ 僅僅當’x’后面不跟着’y’,這個叫正向否定查找
使用量詞
{3}花括號中的數字表示帶查找的數字出現的次數。包含數字的花括號是一種量詞(quantifier)。花花括號本身用做元字符。
?也是一種量詞表示連字符是可選的,連字符可以不出現或只出現一次。還有其他的量詞,例如加號(+)表示“一個或多個”,星號(*)表示“零個或多個”。
懶惰量詞在普通量詞后面加一個?可以使它匹配最少
占有量詞在普通量詞后面加一個+
邊界
就像^和$一樣,\b是一個零寬度斷言,表面上它會匹配空格或者是行起始,而實際上它匹配的是不存在的東西。
\B匹配非單詞邊界。
選擇,分組和后向引用
舉例:先將一個\d放在一對圓括號中,這樣就將它放入了一個分組中,后面可以用\1來對捕獲的內容進行后向引用。
(\d)\d\1可以匹配707等前后兩個數相等的三位數。
當一模式的全部或則部分內容由一對括號分組時,它就對內容進行捕獲並臨時存入內存中。可以通過后向引用重用捕獲的內容,形式為:\1 或 $1。
(?:x) 匹配’x’但是不記住匹配項。這種被叫做非捕獲括號。匹配到的自字符串不能通過數組的[1],...,[n]進行訪問。