正则表达式
正则表达式语法(注意修饰符和优先级)
字符匹配
- 普通字符:普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。
- 元字符:元字符具有特殊的含义,例如 \d 匹配任意数字字符(等价于 [0-9]),\w 匹配任意字母数字字符(等价于 [A-Za-z0-9_]),匹配除换行符(\n、\r)之外的任何单个字符(等价于 [^\n\r])等。
量词
- *:匹配前面的模式零次或多次。
- +:匹配前面的模式一次或多次。
- ?:匹配前面的模式零次或一次。
- runoo+b,可以匹配 runoob、runooob、runoooooob 等,+_ 号代表前面的字符必须至少出现一次(1次或多次)。_
- runoo*b,可以匹配 runob、runoob、runoooooob 等,*****_ 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。_
- colou?r_ 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次或1次)。_
- {n}:匹配前面的模式恰好 n 次。
- {n,}:匹配前面的模式至少 n 次。
- {n,m}:匹配前面的模式至少 n 次且不超过 m 次。
字符类
- [ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 "a"、"b" 或 "c"。
- [^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。
边界匹配
- ^:匹配字符串的开头。
- $:匹配字符串的结尾。
- \b:匹配单词边界。
- \B:匹配非单词边界。
分组和捕获 () 和 ?:
- ( ):用于分组和捕获子表达式。
- (?: ):用于分组但不捕获子表达式。
特殊字符
- \ :转义字符,用于匹配特殊字符本身。

- . :匹配任意字符(除了换行符)。
- | :用于指定多个模式的选择。
?=、?≤、?!、?<! 的使用区别
exp1(?=exp2):查找 exp2 前面的 exp1。
(?≤exp2)exp1:查找 exp2 后面的 exp1。
exp1(?!exp2):查找后面不是 exp2 的 exp1。
(?<!exp2)exp1:查找前面不是 exp2 的 exp1。
实例应用:
- 验证帐号是否合法
验证规则:字母、数字、下划线组成,字母开头,4-16位。
/^[a-zA-z]\w{3,15}$/
- 密码强度正则
验证规则:最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符。
/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/
- 电话号码
验证规则:区号+号码
区号以0开头,3位或4位
号码由7位或8位数字组成
区号与号码之间可以无连接符,也可以“-”连接
/^0\d{2,3}-?\d{7,8}$/
- 邮箱
验证规则:姑且把邮箱地址分成“第一部分@第二部分”这样
第一部分:由字母、数字、下划线、短线“-”、点号“.”组成,
第二部分:为一个域名,域名由字母、数字、短线“-”、域名后缀组成,
而域名后缀一般为.xxx或.xxx.xx,一区的域名后缀一般为2-4位,如cn,com,net,现在域名有的也会大于4位
/^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/
- 身份证
身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/