正则表达式

正则表达式:语法

字面量定义
var reg1=/a/g   /正则表达式内容/修饰符
构造函数定义
var reg2=new RegExp("a","g")
/正则表达式内容/修饰符

正则表达式内容,用于匹配字符串对应的内容

var str=“abcdef” /cde/ 匹配字符cde

修饰符 针对匹配做一系列的扩展
1.全局g
2.大小写不区分 i
3.多行m

修饰符可以使用多个,修饰符可以使用多个地方,而且不需要区分顺序。

正则表达式作用:

1.将所有的字符串,中的内容的字符完成替换,查找,拆分,排序,统计,验证格式。

(正则表达式初级的简单测试,一个简单的密码验证)

正则的方法
test();匹配正则表达式,和正则表达式的需求相同,也就是说,/ab/.test(“字符串”),那我test(“字符串”),中就比喻要有ab,才会返回true

exec();/ab/.exec(“字符串”),找到匹配的元素从什么位置形成的数组,以及匹配内容,不能使用全局匹配。

正则表达式的属性:
reg.soursce,正则表达式内容(只读,不能修改)
reg.flage:修饰符(只读,不能修改)

正则表达式:方法

可以应用于字符串方法:

str.replace();替换


str.match();查找,匹配正则表达式的所有满足项,如果不使用g(全局匹配),
那么和正则exec相同,如果使用g,那么会将所有匹配的字符放在一个数组中。返回这个数组

str.search();查找索引,类似于indexof,不过这个是针对正则匹配的,
全局匹配无效(只能查找一个),但是可以不区分大小写查找,

str.split();切割,切割为数组,这个可以按照不同的需求切割

replace的用法太多了,做个小练习吧

        var str="Abacaddab";

        str=str.replace(/ab/,"00");
        console.log(str);
        str=str.replace(/ab/g,"00");
        console.log(str);
        str=str.replace(/a./g,"00");
        console.log(str);
         str=str.replace(/a./g,function(item,index){
              if(item==="ab") return "00";
              if(item==="ac")  return "11";
              if(item==="ad") return "22";
        })
        console.log(str); 
        str="18617654536".replace(/^(\d{3})(\d{4})(\d{4})$/,"$1****$3");
        console.log(str);

元字符

在正则表达式中所有乱七八糟的符号,就是元字符

/ab/		斜杠中就是正则的内容,正则匹配时,严格按照正则内容的先后顺序匹配

/a./ 		点儿就是元字符中的通配符,代表任意!一个字符!/a../这样就是获取两个字符

\    转义符		\.,反斜杠点儿,转义为字符点儿,而不是让它成为通配符,
								同理反斜杠可以转义任何符号,
								但是转义只能是一个反斜杠,
								也就是说正则表达式中遇到的第一个反斜杠就是转义
	
[]				中括号,里面的内容代表能匹配的唯一一个元素,中括号就是代表一个替代字符的范围,
				中括号内重复无效,所有在中括号里面的东西都会被默认为字符,
				除了^写在第一位的上箭头,和任意位置的反斜杠\以外

[a-z]			代表所有的英文字母小写,(同理大写和0-9的数字);
				排到第一位的上箭头^作用是反义,就是不要箭头后面的内容

转义字符:
	\w	指的是[a-zA-Z0-9]代表一个字符,就是字符数字,下划线中的任意一个字符。
	\W: [a-zA-Z0-9]除了字符数字下划线以外的任意一个字符串
	\d:	[0-9]任意一个数字
	\D: [0-9]任意一个非数字
	\s: 空白字符
	\S: 非空白字符

	正则重复符{}:
	/a{}/  类型或者字符重复
	重复范围{最少重复量,最多重复量},这是一个范围,如果有满足最大的,
	按最大取值,这种叫贪婪匹配
	* 相当于{0,}可能有能没有
	+ 相当于{1,}至少有一次
	?相当于{0,1}有或没有


	.*?  
	 .+?   
		非贪婪匹配,非贪婪匹配的两端必然有其它字符作为前后控制,
		中间内容通常使用范围重复次数
		在重复内容的后面加?就是取最少,就是非贪婪匹配

或者和首尾

| :单竖就是或者,如果在使用或者时就一个字符,使用[]替代就得了,没必要用|
		或者符用的是从左到右的优先匹配

^ :上箭头,在正则表达式起始位置的,叫做起始符
$ :正则表达式的结尾位置,叫做结束符

群组和断言:

群组就是括号():里面有很多题,见老师代码
断言:这里的表达式只作为条件来判断,不作为符号触发

	(?=n) 前瞻断言
	
	(?!n)前瞻否定断言
	
	(?<=n)后瞻断言
	
	(?<!n)	后瞻否定断言

做几个小练习吧


        console.log("abdacb".match(/a./g))//   .  元字符 代表任意1个字符
        console.log("abdacb".match(/a../g))//   .  元字符 代表任意1个字符
        console.log("abda6b".match(/a../g))//   .  元字符 代表任意1个字符
        console.log("a_da*b".match(/a../g))//   .  元字符 代表任意1个字符
        console.log("acbadb".match(/a.b/g))//   .  元字符 代表任意1个字符
        console.log("acba.b".match(/a\.b/g))//   \.  转义为字符.
        console.log("acba.b".match(/a\\b/g))//   在正则表达式中遇到的第一个\就是转义的含义
      
        console.log("abaca6a7".match(/a./g));
        console.log("abaca6a7".match(/a[bcd]/g));//中括号里面的内容代表能匹配的唯一一个元素,[]就是代表一个替代字符的范围
        console.log("abdaca6a7".match(/a[bcd]/g));
        console.log("abbca6a7".match(/[ab][bc]/g));
        console.log("abbca6a7".match(/a[A-Za-z]/g));
        console.log("abbca6a7".match(/a[A-z]/g));//错误的
        console.log("abbca6a7".match(/a[a-Z]/g));//错误
        console.log("abbca6a7".match(/a[0-9]/g));
        console.log("abbca6a7".match(/a[a-zA-Z0-9_]/g));
        console.log("abbca6a7".match(/a[1-7]/g));
        console.log("abbca6a7".match(/a[c-f]/g));
        console.log("abbca6a7".match(/a[1-31]/g));//1-3
        console.log("abbca6a7".match(/a[234235236]/g));//[]内重复无效
        console.log("abbca6a7".match(/a[.^$]/g));  //除了写在第一位^和任意位置\ 以外都会被默认为字符而不是各种其他变化
        console.log("abbca6a7a.".match(/a[0-9.]/g));
        console.log("abbca6a7a.".match(/a[0-9\.]/g));
        console.log("abbca6a7a.".match(/a[0-9^.]/g));
        console.log("abbca6a7a.".match(/a[0-9\\]/g));

        反义
        console.log("abbca6a7a.".match(/a[^a-z]/g));// ^写在[]的第一位,表示反义,不要^后面的内容
        console.log("abbca6a7a.".match(/a[^A-Z]/g));// ^写在[]的第一位,表示反义,不要^后面的内容
        console.log("abbca6a7a.".match(/a[^^]/g));//
        console.log("abbca6a7a.".match(/a[^\^]/g));//除了^的其他字符
        console.log("abbca6a7a.".match(/a[a-z^0-9]/g));//a-z或者^或者0-9中的任意一个

        重复    类型或者字符
        console.log("abbbbbbbacccccasdsdwqadddd".match(/a.{5}/g));
        console.log("abbbbbbbacccccadddd".match(/ab{5}/g));
        console.log("abbbbbbbacccccadddd".match(/a[bd]{4}/g));
        console.log("abbbbbbbacccccadddda12345".match(/a\d{4}/g));
        console.log("abbbbbbbacccccadddda12345".match(/a[0-9]{4}/g));
        console.log("abbbbbbbacccccadddda12345".match(/a\w{4}/g));
        console.log("abbbbbbbacccccadddda12345".match(/a\D{4}/g));
        console.log("abbbacccadddda1234".match(/a.{1}/g)); /a./g
        console.log("abbbacccadddda1234".match(/a.{0}/g)); 
        console.log("abbbacccadddda1234".match(/b{0}/g));
        

        重复范围   如果有满足最大的,按最大数量获取  贪婪匹配
        console.log("abbbacccadddda1234".match(/a.{3,5}/g));
        console.log("abbaacadaa".match(/a.{0,3}/g));
        console.log("abbaacadaa".match(/.{0,3}/g));
        console.log("colour".match(/colou{0,1}r/g));
        console.log("color".match(/colou{0,1}r/g));
        
        console.log("《西游记》《三国演义》《钢铁是怎么炼成的》")
        变成:西游记,三国演义,钢铁是怎样炼成的
        //console.log("《西游记》《三国演义》《钢铁是怎么炼成的》".match(/[^《》]{1,}/g))
        console.log('"你好","欢迎来学习"');
        变成:你好,欢迎来到千锋学习
        //console.log('"你好","欢迎来学习"'.match(/[^"]{1,}/g).join(""))
        
console.log("<div></div><p></p><a><div></div></a>")
       变成:<span></span><span></span><span><span></span></span>
        //console.log("<div></div><p></p><a><div></div></a>".replace(/[^<\/>]+/g,"span"));
     console.log("abac".match(/a(?=c)/g))
         console.log("abac".replace(/a(?=c)/,"0"));//写了一个条件a后面必须是c,找到a
         console.log("abac".replace(/a(?!c)/,"0"));//写了一个条件a后面必须不是c,找到a

         console.log("abdb".match(/(?<=a)b/g))
         console.log("abdb".replace(/(?<=a)b/g,"0"));//判断前面是a,找到后面是b的字符
         console.log("abdb".replace(/(?<!a)b/g,"0"));//判断前面不是a,找到后面是b的字符
   
        // /^(?=\D+\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,16}$/  高级密码验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值