正则表达式RegExp
用于对字符串进行处理操作,匹配、替换、提取
创建方式
构造函数创建方式
var reg = new RegExp(‘abc’);
字面量形式
var reg = /abc/;
test方法
1 2
| 用于对字符串进行匹配操作,参数为字符串,返回值为true或false console.log(reg.test('shdabcgeys'));
|
正则语法
简单类
对内部的字符进行查询,找到后返回true
1 2 3 4 5 6 7 8 9 10 11 12 13
|
var reg = /abc/; console.log(reg.test('ftgyabchuijko')); console.log(reg.test('abcftgyhuijko')); console.log(reg.test('ftgyahbcuijko'));
|
字符类
/[xxx]/ []表示要字符串中存在方括号中的’任一个’则为真
1 2 3 4 5 6 7 8
| /*var reg = /[abc]/; console.log(reg.test('zzazzz')); console.log(reg.test('zzbzzz')); console.log(reg.test('zzczzz')); console.log(reg.test('zzzzz')); console.log(reg.test('zzabczzz'));
|
反向类
/[^xxx]/ 表示字符串中出现’任一’方括号之外的字符可以匹配成功
1 2 3 4 5 6
|
var reg = /[^abc]/; console.log(reg.test('aaaaaaa')); console.log(reg.test('aaaazaaa')); console.log(reg.test('123'));
|
范围类
1
| /[a-z]/ [A-Z][0-9] [\u4e00-\u9fa5] 可以反向
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| /*console.log(reg.test('zzzeeezzz')); console.log(reg.test('zzzgggggzzz')); console.log(reg.test('zzzhhhzzz')); console.log(reg.test('zzzabjkzzz'));*/
var reg = /[3-7a-xB-F]/; console.log(reg.test('456')); console.log(reg.test('bcd')); console.log(reg.test('CDE')); console.log(reg.test('012yzHIJK'));
|
组合类
同时检测多种条件 [a-z0-9]中间不加符号
转义符
\ 可以将普通字符与特殊字符互相转换
// \ 这是一个转义符,作用是对字符进行转义:
//1 对普通字符加\可以让这个字符具有特殊功能。
//2 对具有特殊功能的字符添加\可以让这个字符变成普通字符。
预定义类
\d 用于匹配数字字符0-9
\D 用于匹配非数字字符 /[^0-9]/
\w 用于匹配单词字符/[a-zA-Z0-9_]/
\W 用于匹配非单词字符
\s 用于匹配不可见字符 包括空格和\n
\S 用于匹配可见字符 空格和\n返回假
/./ 匹配可见字符,认为空格为可见
案例
1 2 3 4
| /*var reg = /\d/; console.log(reg.test('abcd123')); console.log(reg.test('abcd'));
|
1 2 3 4
| // \D 用于匹配非数字字符 /[^0-9]/ /*var reg = /\D/; console.log(reg.test('abcd123')); // true console.log(reg.test('123')); // false*/
|
1 2 3 4 5 6 7
| /*var reg = /\w/; console.log(reg.test('adwda')); console.log(reg.test('DWDAWD')); console.log(reg.test('1233213')); console.log(reg.test('____')); console.log(reg.test('!$%#^&*()-='));
|
1 2 3 4 5 6 7
| /*var reg = /\s/; console.log(reg.test(' ')); console.log(reg.test('\n')); console.log(reg.test('fghjkl5678GHJK_><?^%$#@'));
|
1 2 3 4 5 6 7
| /* var reg = /\S/; console.log(reg.test(' ')); console.log(reg.test('\n')); console.log(reg.test('fghjkl5678GHJK_><?^%$#@')); */
|
边界
/^abc/指定开头字符串
1 2 3 4 5
| /*var reg = /^abc/; console.log(reg.test('abcfghjkl')); console.log(reg.test('ghjkabcfghjkl'));
|
/abc$/指定内容结束的字符串
1 2 3 4 5
| /*var reg = /abc$/; console.log(reg.test('dfghjkabc')); console.log(reg.test('dfghjkabcdwad'));
|
/^abc$/严格匹配
1 2 3 4
| var reg = /^abc$/; console.log(reg.test('abc')); console.log(reg.test('abcabc'));
|
量词
重复指定次数n
/^a{n}$/
1 2 3 4 5 6
| /*var reg = /^a{3}$/; console.log(reg.test('aa')); console.log(reg.test('aaa')); console.log(reg.test('aaaa'));
|
重复至少n次
/^a{n,}$/
1 2 3 4 5 6 7
|
var reg = /^a{3,}$/; console.log(reg.test('aa')); console.log(reg.test('aaa')); console.log(reg.test('aaaa')); console.log(reg.test('aaaaaaa'));
|
指定重复范围
/^a{n,m}$/
1 2 3 4 5 6 7
| /*var reg = /^a{3,5}$/; console.log(reg.test('aa')); console.log(reg.test('aaa')); console.log(reg.test('aaaa')); console.log(reg.test('aaaaaaa')); */
|
*代表出现0-n次
/^s*$/
+代表出现1-n次
/^a+$/
? 出现0或1次
/^a?$/
或者 | 代表或者
/ab|bcd|cd/ 含有ab或bcd或cd均可
正则相关方法
g 全局匹配 可以匹配到所有满足条件的内容
i 忽略大小写
字符串.replace() 替换
字符串.match(正则表达式) 提取
1 2
| 提取字符串str中的邮箱内容,注意,需要在正则的最后添加匹配模式g,不要设置严格匹配。输出一个数组 str.match(/\w+@\w+\.\w+/g)
|
正则.exec(字符串) 单次提取
1 2 3 4 5 6 7
| 使用时必须使用同一个正则对一个字符串进行操作 每次调用会得到新一轮匹配的结果(每次调用的结果是不相同的,而且是累计的) 如果完整的一轮匹配完毕,再次调用,会得到null 加括号后可以再次匹配 var reg = /(\w+)@(\w+\.\w+)/g; console.log(reg.exec(str)); console.log(reg.exec(str));
|