正则表达式之零宽断言,负向零宽断言

本文详细介绍了正则表达式中的零宽断言,包括零宽度正预测先行断言(?=exp)、零宽度正回顾后发断言(?<=exp)、零宽度负预测先行断言(?!exp)和零宽度正回顾后发断言(?<!exp),并提供了JavaScript代码示例进行解释。通过这些断言,可以更精确地匹配字符串中的特定模式。
摘要由CSDN通过智能技术生成

零宽断言

1、(?=exp)零宽度正预测先行断言

零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。

以js为例,运行个例子,代码如下:

 <script type="text/javascript">
       var reg=/\b\w+(?=ing\b)/g;//\b单词边界 以ing结尾且以1个或多个字母开头
       var str="I'm singing while you're dancing.";

       console.log(str.match(reg));
  </script>

结果:

可以看到以ing结尾的单词都匹配出来了。

2、(?<=exp)零宽度正回顾后发断言

零宽度正回顾后发断言自身出现的位置的前面能匹配表达式exp。

以下是代码:

  <script type="text/javascript">
       var reg=/(?<=\bre)\w+\b/g;//以re结尾且后面是字母结尾的单词(1个或多个)
       var str="reading a book";

       console.log(str.match(reg));
  </script>

结果:

负向零宽断言

1、(?!exp)零宽度负预测先行断言

断言此位置的后面不能匹配表达式exp。

\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。

代码如下:

  <script type="text/javascript">
       var reg=/\d{3}(?!\d)/g;//这三位数字后面不能跟数字
       var str="123123abs234";

       console.log(str.match(reg));
  </script>

结果:

 可以看到123后面跟的是abs,所以符合,而234后面什么也没跟也符合要求。

2、(?<!exp)零宽度正回顾后发断言

零宽度正回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。

代码:

  <script type="text/javascript">
       var reg=/(?<![a-z])\d{7}/g;
       var str="1231232abs2343333";

       console.log(str.match(reg));
  </script>

结果:

从结果中就能看出,前面不是小写字母的7位数字被匹配出来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值