正则表达式的一些知识
wangzw 2022/1/15 随笔javascript
# 1、什么是正则表达式
正则表达式就是专门规定一个字符串中字符出现的规律的一套规则。
# 2、创建正则表达式的2种方法
1.标准写法:使用new关键字创建 --- var 变量 = new RegExp('正则表达式', 'ig'); 2.简写:var 变量 = / 正则表达式 / ig;
注意:
(1)如果想要在正则表达式使用js的变量或者js函数处理后返回的字符串,则只能使用标准写法创建正则表达式
(2)' i '表示忽略大小写,' g '表示匹配所有
// 匹配数组中包含的字符
var arr = ['国', '人'];
var str = '我是中国人,我爱中国!';
// var reg = /arr.join('|')/g; // 错误的方法
var reg = new RegExp(arr.join('|'), 'g');
var str = str.replace(reg, '*');
1
2
3
4
5
6
2
3
4
5
6
# 3、正则表达式的基本语法
字符 | 描述 |
---|---|
' \ ' | 转义特殊字符 |
' ^ ' | 匹配字符串的开头 |
' $ ' | 匹配字符串的结尾 |
' * ' | 匹配前面的子表达式零次或多次 |
' + ' | 至少匹配前面的子表达式一次 |
' ? ' | 只能匹配前面的子表达式零次或一次 |
{n} | n是一个非负整数。匹配确定的n次 |
{n,} | n是一个非负整数。至少匹配n次 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次 |
. | 匹配除“\n”之外的任何单个字符 |
' | ' | 表示或 |
\d | 匹配一个数字字符 |
\D | 匹配一个非数字字符 |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\s | 匹配任何空白字符 |
\S | 匹配任何非空白字符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
\w | 匹配包括下划线的任何单词字符 |
\W | 匹配任何非单词字符 |
# 4、何时使用正则表达式
# 1.验证字符串格式 --- 手机号验证、邮箱验证等。
# 2.查找敏感词 --- 弹幕敏感词等。
# 2.1 验证字符串
以下用reg表示正则表达式
# 2.1.1 res.test('字符串');
(1)只要字符串格式满足正则表达式的规则就会返回true,否则返回false。 (2)缺点:只要字符串中含有符合规则的内容,正则表达式就会匹配,返回true。 (3)解决:配合' ^ ' 和 ' $ ' 一起使用,表示从头到尾匹配。
// 匹配六位数字
var reg = /\d{6}/;
var result = reg.test('abc123456'); // 返回结果为true
var reg1 = /^\d{6}$/;
var result = reg.test('abc123456'); // 返回结果为false
1
2
3
4
5
2
3
4
5
# 2.2 查找敏感词
以下reg表示正则表达式
# 2.2.1 reg.search('敏感词');
查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回null。
# 2.2.2 reg.match('敏感词')
缺点:只能获得敏感词的内容,不能获得敏感词的位置。
# 2.2.3 reg.exec('字符串');
缺点:如果只调用一次exec()函数,即使正则表达式后加了' g ',也只会获得第一个敏感词的内容和位置。 解决:如果想要获取所有敏感词的位置和内容,必须反复调用exec,直到找不到,返回null为止。
// 示例
var reg = /正则表达式/g;
do{
result = reg.test('敏感词');
console.log('敏感词的内容:' + result[0] + '敏感词的位置' + result.index);
}while(result !== null);
1
2
3
4
5
6
2
3
4
5
6
# 2.2.4 reg.findall('敏感词');
遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
# 2.3 零宽断言
给指定位置添加一个限定条件,用来规定此位置之前或之后的字符必须满足限定条件才可以使正则表达式匹配成功。
// 示例1:数字三位一逗(千分符)
var str = '1234567890.25';
var reg = /(\d)(?=(\d{3})+(\.|$))/g;
str.replace(reg,'$1,');
1
2
3
4
2
3
4
// 示例2:使用0宽断言切割url
var url= 'http://localhost:8080/public/index.html?uname=zhongguo&upwd=zhongguo123';
var reg = / [a-z]+(?:\/\/) | (?<=:\/\/)[a-z0-9. )+(?=:) | (?<=:)\d+(?=\/) | \/[a-z/.]+(?=\?)|(?<=\?)[a-z0-9=&]+(?=#)|/ig;
var arr = url.match(reg);
结果:arr = ['http', 'localhost', '8080', '/public/index.html', 'uname=zhongguo&upwd=zhongguo123'];
1
2
3
4
5
2
3
4
5
# 总结
- 创建正则表达式有两种方法:new关键字创建跟字面量方法
- 验证字符串的方法是test()
- 查找字符串的方法有多个:search()、match()、exec()、findall(),每个方法都有自己的优缺点
- 零宽断言:主要是在指定的位置添加限制条件,在这个位置之前或之后的字符满足条件才匹配成功
博客主要记录一些学习的文章,如有不足,望大家指出,谢谢。