正则表达式中关于\b和分组的理解

正则表达式中关于\b和分组的理解

一、关于界符’\b’

最近在学习和JS相关的前端内容,当然避免不了对正则表达式的掌握。可是在晚上看视频和老师上课时,都感觉对于\b这个界符讲解不够清楚,看了网上的一些博客,大概明白了其中的门道。

这里首先要明白什么是单词边界和单词位置

首先官方一点的理解,单词边界指的就是单词与符号/非单词中间的边界,我们知道,在JS中,单词指的是数字、字母或下划线,那么非单词就很多了,他们可以是空格,也可以是! - + = \n \t…,这里我们在匹配的时候最常见的是空格,这里举一个简单的例子:

<script type="text/javascript">
			var str = " ab cd ef ";
			var reg = /\b\w{2}\b/g;
			console.log(str.match(reg));
		</script>

这里reg其实是一个分割两个单词字符的正则表达式,\b作为单词边界,在这里指的就是空格和单词中间的位置,那么\b写在\w{2}的两侧,意思就是我需要把处在两个空格中的长度为2的单词筛选出来。

这里还要特别说明一点,\b除了单独使用外,还经常搭配\1,\2等一起使用

二、关于分组

正则表达式中用( )来进行分组,用来解决单个字符与字符串整体匹配的问题,在这里,我们采用的是捕获性分组,只有这种分组会暂存匹配到的串

			//捕获性分组
			str = '#1234567';
			reg = /#(\d{4})(\d{3})/;
			console.log(str.match(reg));
			
			console.log(RegExp.$1);//取第一组	1234
			console.log(RegExp.$2);//取第二组	567
			//非捕获性分组 ?: 不存储分组内容
			str = '#1234567';
			reg = /#(?:\d{4})(?:\d{3})/;
			console.log(str.match(reg));
			console.log(RegExp.$1);//empty string
			console.log(RegExp.$2);//empty string

那既然分组是可以捕获的,这对我们有什么用呢?

比如,我们想实现日期格式的替换,把"2020-09-21" -> “2020/09/21”,这可以引用分组

			str = "2020-09-21";
			reg = /(\d{4})-(\d{2})-(\d{2})/;
			// str.match(reg);//捕获分组
			// str = RegExp.$1 + "/" + RegExp.$2 + "/" + RegExp.$3;
			str = str.replace(reg, "$1/$2/$3");
			console.log(str);

还可以通过 \+数字 反向引用,可以结合前面的\b,比如要匹配6个相同的数字字符

			str = "666666";
			reg = /(\d)\1{5}/;//在正则表达式里引用分组,这是反向引用
			console.log(reg.test(str));//true

当然还有常说的前瞻、后顾:

正向与反向前瞻型分组

1、正向前瞻型分组:我们站在当前位置向前看,如果前方是指定内容就返回true,不是就返回false

	var reg = /kid is a (?=doubi)/
	reg.test('kid is a doubi') // true
	reg.test('kid is a shabi') // false

2、反向前瞻型分组:反之

注意:前瞻型分组和非捕获型分组都不会捕获分组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值