正则表达式RegExp

正则表达式RegExp

用于对字符串进行处理操作,匹配、替换、提取

创建方式

构造函数创建方式

var reg = new RegExp(‘abc’);

字面量形式

var reg = /abc/;

test方法

1
2
用于对字符串进行匹配操作,参数为字符串,返回值为truefalse
console.log(reg.test('shdabcgeys'));

正则语法

简单类

对内部的字符进行查询,找到后返回true

1
2
3
4
5
6
7
8
9
10
11
12
13
// 正则在js中采用内置对象方式进行实现的。

// 1 构造函数创建方式
// var reg = new RegExp('abc');

// 2 字面量形式
// var reg = /abc/;

// test方法,用于对字符串进行匹配操作,参数为字符串,返回值为true或false
var reg = /abc/;
console.log(reg.test('ftgyabchuijko')); // true
console.log(reg.test('abcftgyhuijko')); // true
console.log(reg.test('ftgyahbcuijko')); // false

字符类

/[xxx]/ []表示要字符串中存在方括号中的’任一个’则为真

1
2
3
4
5
6
7
8
// 1 在正则中使用[]表示要使用字符类功能
// []整体表示一位字符,内部的多个字符表示当前位置的多种情况。
/*var reg = /[abc]/;
console.log(reg.test('zzazzz')); // true
console.log(reg.test('zzbzzz')); // true
console.log(reg.test('zzczzz')); // true
console.log(reg.test('zzzzz')); // false
console.log(reg.test('zzabczzz')); // true*/

反向类

/[^xxx]/ 表示字符串中出现’任一’方括号之外的字符可以匹配成功

1
2
3
4
5
6
// 2 反向类的标识方式是在字符类的[后面紧跟一个^
// 作用:表示除内部字符外的其他字符可以匹配成功
var reg = /[^abc]/;
console.log(reg.test('aaaaaaa')); // false
console.log(reg.test('aaaazaaa')); // true
console.log(reg.test('123')); // true

范围类

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
// 范围类用于书写字符范围:
// var reg = /[c-h]/;
/*console.log(reg.test('zzzeeezzz'));
console.log(reg.test('zzzgggggzzz'));
console.log(reg.test('zzzhhhzzz'));
console.log(reg.test('zzzabjkzzz'));*/

// /[a-z]/ 表示所有小写字母 /[A-Z]/ 表示所有大写字母 /[0-9]/ 表示所有数字字符

// 组合类:
// 用于同时设置多种检测条件
var reg = /[3-7a-xB-F]/;
console.log(reg.test('456')); // true
console.log(reg.test('bcd')); // true
console.log(reg.test('CDE')); // true
console.log(reg.test('012yzHIJK')); // false

组合类

同时检测多种条件 [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
// \d	用于匹配数字字符
/*var reg = /\d/;
console.log(reg.test('abcd123')); // true
console.log(reg.test('abcd')); // false*/
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
//  \w 用于匹配单词字符  /[a-zA-Z0-9_]/
/*var reg = /\w/;
console.log(reg.test('adwda')); // true
console.log(reg.test('DWDAWD')); // true
console.log(reg.test('1233213')); // true
console.log(reg.test('____')); // true
console.log(reg.test('!$%#^&*()-=')); // false*/
1
2
3
4
5
6
7
// \s 用于匹配不可见字符
// 用于匹配空格和换行
/*var reg = /\s/;
console.log(reg.test(' ')); // true
console.log(reg.test('\n')); // true
console.log(reg.test('fghjkl5678GHJK_><?^%$#@')); // false*/

1
2
3
4
5
6
7
// \S 用于匹配可见字符 (把他忘了,谢谢)
/*
var reg = /\S/;
console.log(reg.test(' ')); // false
console.log(reg.test('\n')); // false
console.log(reg.test('fghjkl5678GHJK_><?^%$#@')); // true
*/
1
2
// . 用于匹配可见字符 (常用方式)
// .匹配时认为空格是可见字符,可以用于对用户输入的内容进行匹配

边界

/^abc/指定开头字符串

1
2
3
4
5
// 1 匹配开始位置:
// 在正则最开始位置书写^,用于匹配以指定内容开头的字符串
/*var reg = /^abc/;
console.log(reg.test('abcfghjkl')); // true
console.log(reg.test('ghjkabcfghjkl')); // false*/

/abc$/指定内容结束的字符串

1
2
3
4
5
// 2 匹配结束位置:
// 在正则最后位置书写$,用于匹配以指定内容结束的字符串
/*var reg = /abc$/;
console.log(reg.test('dfghjkabc')); // true
console.log(reg.test('dfghjkabcdwad')); // false*/

/^abc$/严格匹配

1
2
3
4
// 3 将^和$同时使用,表示严格匹配,必须与内容的内容完全一致
var reg = /^abc$/;
console.log(reg.test('abc')); // true
console.log(reg.test('abcabc')); // false

量词

重复指定次数n

/^a{n}$/

1
2
3
4
5
6
// 1 重复指定次数
// {n}
/*var reg = /^a{3}$/;
console.log(reg.test('aa')); // false
console.log(reg.test('aaa')); // true
console.log(reg.test('aaaa')); // false*/

重复至少n次

/^a{n,}$/

1
2
3
4
5
6
7
// 2 重复至少几次
// {n,}
var reg = /^a{3,}$/;
console.log(reg.test('aa'));//false
console.log(reg.test('aaa'));//true
console.log(reg.test('aaaa'));//true
console.log(reg.test('aaaaaaa')); //true

指定重复范围

/^a{n,m}$/

1
2
3
4
5
6
7
// 3 指定重复的范围
// {n,m}
/*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() 替换

1
str.replace(/v/ig, 'z')

字符串.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));

正则表达式RegExp
http://www.dwyblog.cn/2021/02/10/正则表达式RegExp/
作者
幸福来敲门
发布于
2021年2月10日
许可协议