零宽断言
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位数字被匹配出来了。