正则表达式

概述

  • 正则表达式是一种描述文本规则的代码

作用

  • 模式验证(文本匹配)
  • 文本搜索
  • 文本替换
  • 从文本中提取字符串

声明+使用

  • java
1.声明:String reg = "";
2.使用
	String类中函数:matches() split() replaceAll()
	Pattren(模式对象)Matcher(匹配器)Pattren p = Pattren.compile("a*b");
		Matcher m = p.matcher("aaaab");
		boolean b = m.matches();//true
  • js
1.声明
	var reg = /...pattern.../[flags]
	var reg = new RegExp("pattern","[flags]")
		pattern:必选项---可以是要查找的内容
		flag:可选项
			g:全文查找
			i:忽略大小写
			m:多行查找
2.使用
	String类中函数:splic() 截取
						加不加g效果相同
				   replace() 替代
				   		有g则替代所有满足正则表达式的字符串,否则只替换第一个
				   match() 返回匹配的字符串数组
				   		有g则返回所有满足正则表达式的字符串,否则只返回第一个
				   search() 返回匹配的字符串的索引
				   		
	RegExp:text() 判断字符串是否匹配正则,返回布尔值
			exec() 返回字符串中与正则相匹配的字符串
				注意:1.字符串中含多个匹配的小字符串时,第一次exec()返回第一个匹配的,第二次exec()返回第二个匹配的...
							但是有g(全文查找)时才会有这样的效果
				      2.若表达式中有捕捉用的(),则返回的数组中也有可能含有()
				      3.默认都是贪婪匹配,量词加上?则不贪婪

正则表达式构造

  • 简单模式
元字符
	( ) [ ] {} \ ^ $ | ? * + .
	需要转义,路径用\\连接时,以\\\\分割
特殊字符
	\t \n \r \f \a \e \b \v \0
字符类:只能匹配一个字符 [xx]
	简单类:[abc] abc中的一个
	负向类:[^abc] 除了abc的一个
	范围类:[a-zA-Z] [a,z][A,Z]中的一个
	组合类:[a-zA] a到z或者A
		不要有空格,[]里面不能再嵌套[],不能写成[a-m[^b-e]]
		/num[1-4s]/===num1,num2,num3,num4,nums
预定义类:[]
	\d 数字:[0-9] 
	\D 非数字: [^0-9] 
	\s 空白字符:[ \t\n\x0B\f\r] 
	\S 非空白字符:[^\s] 
	\w 单词字符:[a-zA-Z_0-9] 
	\W 非单词字符:[^\w] 
量词:多个
	?:0次或1次     注意:量词?表示非贪婪匹配
	*:0次或多次
	+:1次或多次
	{n}:n次
	{n,m}:n-m次
	{n,}:至少n次

字符类+量词:同一个字符出现的次数
  • 复杂模式
捕获分组:(   )  分组且存储,使用$n捕获
	分组后将分组的内容看成一个整体
非捕获分组:(?: ) 分组但不保存,使用$n捕获不到
候选:| |连接候选的字符串
	/(aaa|bbb|ccc)/:aaa或bbb或ccc
		区分:[abc]
反向引用:RegExp.$1
	分组从左到右存储在RegExp构造函数中,通过$n获取,正则中用\表示$
		var sToMatch="#123456789";
		var reg=/#(\d+)/;
		console.log(  reg.test(sToMatch)   );
		console.log(RegExp.$1);//输出 "123456789”
				
		var sToChange="1234 5678";
		var reMatch=/(\d{4}) (\d{4})/;
		var sNew=sToChange.replace(reMatch,"$2 $1");
		console.log(sNew);//输出 "5678  1234”	
前瞻:括号内的内容不代表分组
	正向前瞻:(?= ) 在前后一定出现 
	负向前瞻:(?! ) 在前后一定不出现 
边界:	^:行开头  注意在[]中才表示取反
	 	$:行结尾
	 	\b:单词边界
	 	\B:非单词边界

常用正则表达式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值