正则这东西在不少人看来就是要背的记的东西不少,一串长的正则表达式看起来像看天书同样的。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之类的