正则表达式的创建
1.字面量创建
var 自定义名称 = /正则表达式/修饰符
例如:var reg=/hello/g
2.构造函数创建
var 自定义名称=new RegExp(''正则表达式'',"修饰符")
例如:var reg=new RegExp(''hello'',''g'')
字符分类
1.普通字符
字母、数字、下划线、汉字、没有特殊含义的符号(,;!@等)
2.特殊字符
\:将特殊字符转义成普通字符
3.模式修饰符
i:ignoreCase,匹配时忽视大小写
m:multiline,多行匹配
g:global,全局匹配
注意:字面量创建正则时,模式修饰符写在一对反斜线后
正则表达式实例方法
1.exec
可用来匹配字符串中符合正则表达式的字符串
如果匹配到,返回值是一个result数组:
[匹配的内容,index: 在str中匹配的起始位置,input: 参数字符串,groups: undefined]
否则返回null
2.test
用来测试待检测的字符串中是否有可以匹配到正则表达式的字符串,如果有返回true,否则返回false
正则表达式的规则
1.字符集合
[abc] 查找方括号之间的任何字符
var reg1 = /[abc]/;// 包含有a 或者 包含有b 或者包含有c
[0-9] 0到9区间的任何整数 “ -” 连字符,表示一个范围内的字符
[a-zA-Z] a到z A到Z之间的任意一个字符
var reg1 = /[0-9]/
[^asd] 除asd之外的字符 ^表示除了xxxx之外的字符
^[a]$ “^”写在中括号外面表示以什么开头 “$”表示以什么结尾
当“^”与“$”一起使用时表示必须是精准匹配
var reg = /^abc$/
//表示必须以adc开头并以abc结束 只有abc符合匹配规则,abcabc是不符合的
2.字符类
"." 除换行符\n和回车符之外的任何单个字符
\d 匹配一个数字字符,等效于[0-9]
\D 等效于[^0-9] 相当于\d的取反
\w 匹配包括下划线的任何单个字符,包括A~Z,a~z,0~9和下划线"_",等效于 [a-zA-Z0-9_]
\W 相当于 \w的取反
\s 匹配任何Unicode空白字符,包括空格、制表符、换页符等,等效于[\f\t\n\r]
\S 相当于\s的取反 等价于[^\f\t\n\r]
3.数量词
X* 表示X出现的次数为 0 或多次。等价于{0,}
X+ 表示X出现的次数为 1 或多次。等价于 {1,}
X? 表示X出现的次数为 0 或 1 次。等价于{0,1}
X{n} n为非负整数。前面的 x 重复出现 n 次
X{n,} n为非负整数。前面 x 重复出现至少 n 次,及>=n次
X{n,m} n和m为非负整数。前面的x 重复出现至少 n 次,至多 m 次
重复方式
贪婪模式
尽可能多的匹配(首先取最多可匹配的数量为一组进行匹配),当匹配剩余的字符串,还会继续尝试新的匹配,直到匹配不到为止,为默认模式
非贪婪模式
尽可能少的匹配(每次取最少匹配的数量为一组进行匹配),直到匹配不到为止
使用方法:在量词后加上 ?
选择,分组,引用
选择
字符"|"用于分隔供选择的字符,选择项的尝试匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它可以产生更好的匹配
分组
/(briup){3}/ 这里有圆括号包裹的一个小整体成为分组
等价于/briupbriupbriup/
候选
一个分组中,可以有多个候选表达式,用 | 分隔:
例如:var reg = /I Like (basketball|football|table tennis)/
捕获
例如:var reg = /(\d{4})-(\d{2})-(\d{2})/
var date = '2021-08-29'
reg.test(date)
console.log(RegExp.$1)//输出分组1 //2021
console.log(RegExp.$2)//输出分组2 //08
注意:$1引用了第一个被捕获的串,$2是第二个,依次类推
嵌套分组的捕获
规则是以左括号出现的顺序进行捕获
var reg = /((apple) is (a (fruit)))/
var str = "apple is a fruit"
reg.test(str) // true
RegExp.$1 // apple is a fruit
RegExp.$2 // apple
RegExp.$3 // a fruit
RegExp.$4 // fruit
引用
正则表达式里也能进行引用,这称为反向引用
例如:var reg = /(\w{3}) is \1/
\1引用了第一个被分组所捕获的串,换言之,表达式是动态决定的。
注意,如果编号越界了,则会被当成普通的表达式
实例:
// 1.手机号验证 1开头 3 4 5 7 8
var reg=/^1[34578]\d{9}$/;
console.log(reg.test('13804804496'));
// 2.密码验证 包含大小写/数字/!@#%& >=6
// 1.(?=.*[A-Z] )(?=.*[a-z])(?=.*\d)(?=.*[!@#%&])
// 2.^[a-zA-Z\d!@#%&]{6,}$
var reg=/(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#%&])^[a-zA-Z\d!@#%&]{6,}$/;
console.log(reg.test('Aa@1232'));