正則這東西在不少人看來就是要背的記的東西不少,一串長的正則表達式看起來像看天書同樣的。javascript
好比這樣的 :)java
/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/
其實總的來講正則其實也沒那麼複雜,多是你用的頻率比較低加上短時間記憶把這個東西從意識上覆雜化了。正則表達式
在進入正題以前咱們先作一個正則基礎知識快速掃盲。code
'231erwefsdf'.replace(/[0-9]{2,4}/g, 'q') // "qerwefsdf"
// 分組一個經常使用的用法 一個分組按照從左往右的順序分爲$1 $2 $3... 使用replace能夠對分組進行操做 '231 my name is hhh'.replace(/([0-9]{2,4})/g, '$1 new add,') //"231 new add, my name is hhh"
//能夠用\1,\2...來引用正則表達式從左往右的第n個表達式 //匹配日期格式,表達式中的\1表明重複(\-|\/|.) var rgx =/\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}/ rgx.test("2016-03-26") // true rgx.test("2016-03.26") // false
其餘一些高級用法後面遇到了再講解~regexp
/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/
當咱們看到正則第一印象是看他的分組,通常複雜的正則表達式都是由不一樣的分組組成ip
[a-zA-Z] : 匹配任意大小寫字符字符串
| : 或判斷class
^ : 從最開始進行匹配test
因此第一個括號的內容就是,從最開始第一個字符匹配任意大小寫字符和數字,也就是郵箱第一個字符不能爲符號基礎
\w : 匹配包括下劃線的任何單詞字符。等價於「[A-Za-z0-9_]」
\-: 任何符號須要匹配成字符串而忽略它真正的正則含義都須要加上\ , \ + 爲匹配加號字符串
\+ : 匹配一次或者屢次
由此可知,這個分組是用來匹配郵箱的用戶名的能夠填入任何字符或者-號
這一部分是匹配郵箱服務商的正則好比 @163這類的
\. : 匹配字符點
{2, 4}: 將前一個類匹配2到4次
$ : 從最後開始匹配
這部分主要是用來匹配郵箱後面的 .com .cn之類的