js正则表达式详解及个人经验总结(正反向预查,分组捕获,反向引用,子表达式...等等)

正则表达式

regular expression:RegExp

用来处理字符串的规则

  • 只能处理字符串
  • 它是一个规则:可以验证字符串是否符合某个规则(test),也可以把字符串中符合规则的内容捕获到(exec / match…)
编写正则表达式

创建方式有两种:

  • 字面量
  • 构造函数
//=>字面量创建方式(两个斜杠之间包起来的,都是用来描述规则的元字符)
let reg1 = /\d+/g;//=>构造函数模式创建  两个参数:元字符字符串,修饰符字符串
//=>构造函数因为传递的是字符串,\需要写两个才代表斜杠
let reg2 = new RegExp("\\d+","g");

字面量和构造函数创建的区别:
                      构造函数创建的正则表达式可以使用变量,比较灵活

	let type = "aaa";
    //这种情况只能使用构造函数方式(因为它传递的规则是字符串,只有这样才能进行字符串拼接)
    reg = new RegExp("^@" + type + "@$");
    console.log(reg.test("@aaa@")); //=>true
    console.log(reg.test("@aaaa@")); //=>false

总结:如果想把一个变量的值作为正则元字符的一部分,只能通过构造函数的方式创建正则

正则表达式由两部分组成:

  • 元字符
  • 修饰符

常用元字符:

1.量词元字符,设置出现的次数
           *     			零到多次
           +     			一到多次
           ?    			零次或者一次
           {
   n}   		出现n次
           {
   n,}  		出现n到多次
           {
   n,m} 		出现n到多次
           
2.特殊元字符,单个或者组合在一起代表特殊的含义
          \      	   转义字符
           .     	   除\n(换行符)以外的任意字符
 		 ^  	   	   以哪一个元字符作为开始	
		 		let reg=/^\d/    
				console.log(res.test("fDGng"))       //false
				console.log(res.test("2019SFfe"))   //true
				console.log(res.test("egswb2019"))   //false
					
		$      	   以哪一个元字符作为结束
				let reg=/\d$/    
				console.log(res.test("frdres"))       //false
				console.log(res.test("2019sesefe"))   //false
				console.log(res.test("wfasg2019"))   //true
				
		\n     	   组合元字符,表示换行,\把n转译成了换行符
		\d           0-9之间的数字
		\D0-9之间的数字(大写和小写的意思是相反的)
		\w      	    数字,字母,下划线中的任意一个字符
		\W          除所有字母,数组,下划线外的字符(大写和小写的意思是相反的)
		\s            一个空白字符(包含空格,制表符,换页符等)=[\r\n\t\v\f]
		\S           匹配非空格的字符(大写和小写的意思是相反的)
		\t            一个制表符(一个TAB键,四个空格)
		\b            匹配一个单词的边界
		\B            匹配一个非单词的边界
		\n            匹配一个换行符 
		\r             匹配一个回车符
		x|y           x或者y中的一个字符 
	   [xyz]        x或者y或者z中的一个字符
		[^xy]       除了x/y以外的任意字符
		[a-z]        指定a-z这个范围中的任意字符 [0-9a-zA-Z_]===\w
		[^a-z]      非a-z这个范围中的任意字符
		[\u4E00-\u9FA5]    汉字范围     
	    	()           正则中的分组符号
	       (?:)        只匹配不捕获,不让他捕获该子表达式(match,matchAll)
					let reg = /(?:b)(c)/
					let str = "abcabc"
					console.log(str.match(reg))  //["bc", "c"]
					console.log(...str.matchAll(reg))//["bc", "c"]

			(?=)   正向预查,表示匹配后面紧挨着的字符的字符串
			(?!)    反向预查,表示匹配后面不是该字符的字符串
					let str = "abcacb"
					let reg1 = /a(?=b)/g   //匹配a后面紧挨着是b的字符串
					let reg2 = /c(?!b)/g   //匹配c后面不是b的字符串
					console.log(str.match(reg1))  //["a"]
					console.log(str.match(reg2))  //["c"]
					
			(?<=pattern)xxx   反向预查,表示匹配紧跟pattern后面的xxx

^$和转义字符\详解:

		let reg=/\d+/      //^,$都不加,表示字符串包含符合规则的内容即可
		let reg=/^\d+$/    //^,$都加,表示字符串只能是和规则一致的内容
-------------------------------------------------------------------------------------------
		let reg=/^2.3$/   
		console.log(reg.test("2f3"))   //true  
		console.log(reg.test("2.3"))  //true
		console.log(reg.test("23"))   //false
		console.log(reg.test("2fsef3"))  //false    
------
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codingWeb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值