笔记目录
小概
本章的学习内容围绕正则表达式进行学习,主要分为正则表达式的常用符号的认识和应用场景。
1. 正则表达式介绍
正则表达式:Regular Expression 简写:RegExp RegEx
:就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
2. 创建方式
//创建正则对象.
//1. 使用构造函数的函数创建
let reg1 = new RegExp('<.{4}>');
let str = "哈哈呵呵嘻嘻</html>嘿嘿";
let res = reg1.test(str);
console.log(res);
//2.使用字面量的方式去创建
let reg2 = /男|女/;
let str = "滕宇是nv的吗?";
let res = reg2.test(str);
console.log(res);
3. 预定义类
1.元字符/预定义类-就是事先给他赋予了一些含义的字符.
. [^\n\r] 除了换行和回车之外的任意字符
\d [0-9] 数字字符 [0123456789] digit
\D [^0-9] 非数字字符
\s [\f\r\n\t\v] 不可见字符
\S [^\f\r\n\t\v] 可见字符
\w [a-zA-Z0-9_] 单词字符(所有的字母数字和_)
\W [^a-zA-Z0-9_] 非单词字符
参数
i 忽略大小写
g 全局匹配 global
gi 全局匹配+忽略大小写
console.log(/a/.test("a")); //true
console.log(/a/.test("A")); //false
console.log(/a/i.test("A")); //true
console.log(/a/i.test("bbb"));//false
4. 或和三个括号
1.| 或
// 检测的字符串里面有没有男这个字或者女这个字,如果有就返回true, 否则就返回false.
console.log(/男|女/.test('文文是男女的吗?'));//true
console.log(/男|女/.test('文文是男的吗?'));//true
console.log(/男|女/.test('文文是女的吗?'));//true
console.log(/男|女/.test('文文是nv的吗?')); //false
2.()小括号:表示优先级,优先判断或执行小括号中的代码
console.log(/^(abc){3}$/.test('abcabcabc')); //true
3.[ ] 中括号:字符集合,匹配方括号中的任意字符
console.log(/[abc]/.test("a")); //true a || b || c
4.{ } 大括号:量词符,里面表示重复次数
特殊的三个量词符:
- (*)重复零次或更多次 x >=0
- (+)重复一次或更多次 x>=1
- (?)重复零次或一次 x=(0||1)
console.log(/^colo*r$/.test("colr")); //true
console.log(/^colo*r$/.test("color")); //true
console.log(/^colo*r$/.test("coloor")); //true
console.log(/^colo+r$/.test("colr")); //false
console.log(/^colo+r$/.test("color")); //true
console.log(/^colo+r$/.test("coloor")); //true
console.log(/^colo?r$/.test("colr")); //true
console.log(/^colo?r$/.test("color")); //true
console.log(/^colo?r$/.test("coloor")); //false
//{n} n次 x=n
//{n,} 重复n次或更多 x>=n
//{n,m} 重复出现的次数比n多但比m少 n<=x<=m
console.log(/^colo{2,5}r$/.test("coloooor"));//true
5. 范围类和组合类
范围类:0-9:表示数字0到9
a-z:表示小写字母a到z
A-Z:表示大写字母A到Z
console.log(/[a-m1-5]/.test("b"))//true
console.log(/[a-m1-5\n]/.test("ttttyyyyzzzc66666"))//true
//2个简单类组成的正则对象, 那验证的字符串至少有2个字符串,检测结果才是true.
//至少要有2个字符,第一个字符满足第一个简单类规则,第二个字符满足第二个简单类规则.
console.log(/[^0-5][^a-g]/.test("6")); //false 从数量上来讲就已经不符合这个正则规则了
console.log(/[^0-5][^a-g]/.test("6z")); //true
6. 边界
^以什么开头 /^ /
$以什么结尾 / $/
console.log(/^6+a/.test("6a77776abbbb")); //true
console.log(/^6.a/.test("6\nabat ")); //false .表示除了换行和回车之外的任何字符
注意:/^ /边界符 ,如果^在[ ]中([^ ])则表示反向类,比如[^\d]表示的是除了数字外的任意字符。
边界符 ^ 和反向类[ ^ ]中的 ^ 不能混淆。
7. 验证汉字
escape(‘’):汉字转义成Unicode编码
unescape(‘’):把Unicode编码转回汉字
所有的汉字都在 [\u4e00-\u9fa5] 这个范围中
//需求: 写一个正则去验证/去判断一个字符串中是否出现了中文汉字.
//"ewrfewrferew国rewr"
console.log(/[\u4e00-\u9fa5]/.test('ewrfewrferew国rewr'));//true
字符串方法配合正则表达式使用
字符串方法-replace替换
字符串方法replace(‘原字符’,替换字符)可以配合正则表达式使用,达到同时替换多处的效果
.replace(正则表达式,替换字符)
//. 把下面字符串中的工资全部替换成1000
let str = "老张200老李300老王400";
let strNew = str.replace(/\d+/g,'1000');
console.log(strNew);
\d:只能一个数字,\d+则表示一个及以上数字,才能得到200,300,400、g则表示全局匹配,后面的300,400也能匹配.
字符串方法-match提取
字符串方法-match提取
找到一个或多个 正则表达式的匹配.
如果找到了就返回一个数组,数组的元素就是找到的值.
如果找不到就返回null.
//.提取邮箱.
let str = "123123@xx.com,fangfang@valuedopinions.cn 楼主好人一生平安286669312@qq.com 楼主求个种子2、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
//let arr = str.match(/\w+@\w+(\.\w+)+/g);
let arr = str.match(/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);
console.log(arr);
- 分组提取
//提取email中的每一部分
var str = "123123@xx.com.cn";
var reg = /(\w+)@(\w+)\.(\w+)(\.\w+)?/g;
var array = str.match(reg);
console.log(array);
// //获取分组的数据 ()是分组
console.log(RegExp.$1); //123123
console.log(RegExp.$2); //xx
console.log(RegExp.$3); //com
console.log(RegExp.$4); //.cn
字符串方法-search检索
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
//.需求:找到下面字符串中第一次出现数字的地方.
let str = "蒋毅200龙龙300欧阳400";
let res = str.search(/\d/);
console.log(res); //2(下标)
字符串方法-split分割
split(“分隔符”),用正则表达式写分隔符,可以让分隔符局限性小。
//1.把下面字符串中的名字分割出来
let str = "蒋少200张少300王少400刘少";
let arr = str.split(/\d+/);
console.log(arr);
string.split()分割,arr.join()拼接
正则对象的相关方法
RegExp.test():测试字符串是否符合正则表达式,符合返回true,不符合返回false
RegExp.exec():正则对象的exec这个方法,提取满足正则规则的第一个.,加g也不能提取所有。注意:正则对象的exec方法提取符合正则规则的第一个,还会返回索引.
var str = "哈哈哈哈哈111呵呵呵222嘿嘿333";
var reg = /\d{3}/g;
let res = reg.exec(str);
console.log(res); //111 index=5
总结
细节太多,至少得都了解吧。