第一部分 基础知识
一、正则申明方式
1、构造函数方式
var reg = new RegExp('\d', 'gi');
修饰符 | 说明 |
---|---|
i | 忽略大小写匹配 |
g | 全局匹配,即是匹配一个后继续匹配,直到结束 |
m | 多行匹配,即是遇到换行后不停止匹配,直到结束 |
2、字面量方式
var reg = /\d/gi;
3.正则相关符号
3.1方括号 []
1)^ 在 [] 内开始位置及正则双斜线开始位置有特殊含义,其他位置表示 ^ 字符本身.$符号与^符号相反,表示结尾
'adobe 2016'.match(/^[a-zA-Z]+/);
// ["adobe"]
'adobep'.match(/p$/)
// ["p"]
2)在 [] 内开始位置时,表示不匹配 [] 内除 ^ 以外的所有字符:
'adobe'.match(/[^abc]/g);
// ["d", "o", "e"]
3)- (连字符)表示左边字符的 ASCII 值到右边字符 ASCII 编码值之间及左右字符自身的所有字符
'adobe PS 2016'.match(/[a-g]/g);
// ["a", "d", "b", "e"]
3.2、特殊含义字符
● . 匹配任意单个字符,除换行和结束符
'1+0.2*2=1.4'.match(/.{2}/g);
// ["1+", "0.", "2*", "2=", "1."]
● \w 匹配任意单词字符(数字、字母、下划线),等价于[A-Za-z0-9_]
'ad34~!@$ps'.match(/\w/g);
// ["a", "d", "3", "4", "p", "s"]
● \W 匹配任意单词字符,与\w相反,等价于[^A-Za-z0-9_]
'ad34~!@$ps'.match(/\W/g);
// ["~", "!", "@", "$"]
● \d 匹配数字,等价于 [0-9]
'ps6'.match(/\d/g);
// ["6"]
● \D 匹配非数字,等价于 [0-9]'
'ps6'.match(/\D/g);
// ["p", "s"]
● \s 匹配空白字符,主要有(\n、\f、\r、\t、\v),注意'a\sb'中的\s依然是字符s,所以'a\sb'.match(/\s/g)返回 null
'adobe ps'.match(/\s/g);
// [" "]
● \S 匹配非空白字符,与\s相反
'adobe ps'.match(/\S/g);
// ["a", "d", "o", "b", "e", "p", "s"]
3.3、量词说明
● n+ 匹配包含至少一个n的字符串
'adobe paas'.match(/a+\w+/g);
// ["adobe", "aas"]
n* 匹配包含零个或多个n的字符串
n? 匹配包含零个或一个n的字符串
n{x} 匹配包含连续x个n的字符串
n{x,y} 匹配包含至少连续x个且最多连续y个n的字符串
n{x,} 匹配包含至少连续x个n的字符串
表达式1 | 表达式2 |
---|---|
n+ | n{1,} |
n* | n{0,} |
n? | n{0,1} |
3.4 小括号 () 用法
1)捕获用法
● 表示对匹配的字符串进行分组
'adobe cs9cs10, adobe cs11'.match(/([a-z]+\d+){1,2}/g)
//[ 'cs9cs10', 'cs11' ]
分组还有一个用法,替换字符串 ,$1,$2,$3 只是占位符
var dateStr = '2018/04/18';
var reg = /(\d{4})\/(\d{2})\/(\d{2})/;
dateStr = dateStr.replace(reg, '$1-$2-$3') //"2018-04-18"
● 与|一起使用表示选择性
"he is 12. she is 13. it's box".match(/(it|she|he)\s+is/g);
// ["he is", "she is"]
● 表示对匹配的字符串捕获(正则在非全局(g)模式下)
'adobe cs9'.match(/[a-z]+(\d+)/);
// ["cs9", "9"]
//注意是cs9里面中最后一个匹配的,比如
'adobe cs9f5'.match(/[a-z0-9]+(\d+)/)
//[ 'cs9f5', '5']
2)非捕获用法,以(?)形式出现
● (?:n ) 表示非捕获组(不会对匹配的字符串捕获)
'adobe11ps15test'.match(/[a-z]+(1|3)+([a-z]+)/);
// ["adobe11ps", "1", "ps"]
//如果不想数组含有1,可以这样
'adobe12ps15test'.match(/[a-z]+(?:\d+)([a-z]+)/);
// ["adobe12ps", "ps"]
● (?=n ) 匹配任何其后紧跟字符n的字符串,但返回中不包含n
'adobe12ps15test'.match(/[a-z]+(?=\d)/g);
// ["adobe", "ps"]
● (?!n ) 匹配任何其后没有紧跟字符n的字符串,返回中不包含n
'adobe12ps15test'.match(/[a-z]+(?!\d)/g);
// ["adob", "p", "test"]
● (?<=n ) 匹配任何其前紧跟字符n的字符串,返回中不包含n
'adobe12ps15test'.match(/(?<=\d)[a-z]+/g);
// ["ps", "test"]
● (?<!n ) 匹配任何其前紧跟字符n的字符串,返回中不包含n
'adobe12ps15test'.match(/(?<!\d)[a-z]+/g);
// ["adobe", "s", "est"]
3.5对象方法
1) RegExp对象相关方法
2)String对象相关方法
4.注意
. * + 等特殊符号的含义在[]中括号中失效
4.常见的正则表达式
1.手机号:/^1[35678]/d{9}$/
2.邮箱:/^\w+@\w+\.\w{2,5}$/ 或者 /^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+\.[0-9a-zA-Z_-]{2,5}$/
3.用户名:/^[a-zA-Z0-9_-]{4,15}$/ 只能是字母数字下划线横杠,长度4-15位
4.密码:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/ 至少含一个字母,数字 长度6-20位