本文地址:http://www.javashuo.com/article/p-cbihyalg-ep.html正則表達式
匹配單個數字的寫法,能夠是 「[0-9]
」 也能夠是 「\d
」。segmentfault
匹配單個非數字字符,則使用大寫 「\D
」。學習
匹配 26 個字母的任意一個,使用 「[a-zA-Z]
」spa
匹配任意一個字符,使用點號 「.
」設計
匹配具體字符,則直接寫上去便可。好比 「abcd
」 就是匹配它自己。若是遇到特殊字符,則須要進行轉義,轉義字符爲 「\
」。code
匹配一個字符,使用中括號的作法稱爲 「字符集」。中括號用於指定一個 「集」,匹配這個集中的一個字符,如十六進制數 「[0-9a-fA-F]
」。字符集內的點表示的是點號自己,但其餘的特殊字符仍是須要進行轉移,好比反斜槓字符。regexp
若是要表示某個規則的重複,則須要使用量詞。使用花括號表示重複次數。好比 8 個數字能夠這樣表示:「\d{8}
」blog
花括號中的量詞能夠變化,好比表示 7 到 8 個數字,則表示爲 「\d{7,8}
」。表示上限的右值能夠不寫,好比 「{0,}
」 是合法的,表示大於等於 0 個字符;但試圖單獨表示上限的 「{,10}
」 則不合法,至少應該寫爲 「{0,10}
」。ip
加號 「+
」 表示它左邊的元素數量爲 「一個或多個」,等於 「{1,}
」 的效果。因此加號也是特殊字符。unicode
星號 「*
」 表示它左邊的元素數量爲 「零個或至少一個」,即 「{0,}
」。
問號 「?
」 表示 「零個或一個」,等同於 「{0,1}
」。
上面的諸如 +
、*
,匹配的時候都會使用 「貪心」 的模式,也就是匹配儘可能多的個數。好比字符串 「55555」,使用 「5+
」 去匹配時,會匹配到它可以找到的最長字符串,即 「55555」。
若是在量詞後面加上問號,則使匹配模式變爲 「懶惰」 的,也就是匹配最少的。好比使用 「5+?
」 去匹配,則只會找到可以匹配的最小字符 「5」.
如下都是可用的懶惰匹配表達式:+?
, *?
, {n,}?
, {m,n}?
能夠把表達式中的一部分 「捕獲」 起來,做爲宏放在後邊引用。使用括號進行定義(捕獲),而後再定義的後面使用 「\1
」 進行引用;若是是第二個捕獲,則使用 「\2
」,以此類推。
分組通常都會被保存起來,可是當表達式很是長的時候,可能須要明確指明不保存該分組。好比使用這個格式 「(?:THE|The|the)
」,就使用了 「?:
」 標號來表示不要進行命名標記。
使用 「|
」 來連接兩個字段,提供 「或」 的邏輯。注意與括號搭配使用
若是在集合 「[...]
」 中使用字符 「^
」,則表示 「非」,如 「[^0-9]
」 等同於 「\D
」。
如下是各類經常使用的單字符匹配列表:
指代類型 | 模式 | 備註 |
---|---|---|
數字 | \d |
|
字母、數字、下劃線 | \w |
等效於 「[_a-zA-Z0-9] 」 |
非數字 | \D |
|
非字母 | \W |
|
製表符 Tab | \t |
|
Null 字符 | \0 |
|
Backspace | [\b] |
|
空格 | \s |
等效於 「[ \t\n\r] 」 |
Return | \r |
|
換行 | \n |
|
單詞之間的空白 | \b |
這裏只是匹配單詞的開始 / 結束,不消耗任何字符 |
任意一個字符 | . |
行結束符沒法使用這個符號匹配 |
本小節設計一個概念:斷言,又稱爲 「零寬度斷言(zero-width asseration)」。這個概念不匹配字符,而是匹配字符串中的位置。
^
」 表示一行的開始$
」 表示一行的終止好比要匹配單詞 「the」,則寫 「\bthe\b
」。若是要匹配哥哥中間帶 「e」 的單詞,則能夠寫 「\Be\B
」
可使用 「\<
」 匹配單詞開頭,「\>
」 匹配單詞結尾。可是這兩個並不建議使用,由於新的匹配器可能不支持。
正則表達式支持輸入 unicode 的值,如 「\u00e9
」。注意 unicode 必須有四位十六進制位,大小寫都可。Javascript 還支持 「\xe9
」 的寫法,然而 「\x00e9
」 則是錯誤的。
============== End