JS高级05(正则表达式)


小概

本章的学习内容围绕正则表达式进行学习,主要分为正则表达式的常用符号的认识和应用场景。


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.{ } 大括号:量词符,里面表示重复次数
特殊的三个量词符:

  1. (*)重复零次或更多次 x >=0
  2. (+)重复一次或更多次 x>=1
  3. (?)重复零次或一次 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

总结

细节太多,至少得都了解吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值