断言用来声明一个为真的事实。正则表达式中只有断言为真的时候才会进行匹配。断言匹配的是一个事实,而不是内容。断言用于查找在某些内容(但并不包括这些内容)之前或者之后,也就是一个位置(如\b,^,$),应该满足的一定条件,也叫零宽断言。
顺序肯定环视(?=exp)
零宽度正预测先行断言,也就是顺序肯定环视,断言自身出现位置的后面能匹配表达式 exp
。
比如,匹配以ing结尾的单词的前面部分( 除了ing以外):
正则表达式:\b\w+(?=ing\b) //注:正则表达式元字符\b表示单词的开头和结尾
匹配的内容:I'm singing while you're dancing.
以上正则表达式会匹配到sing和danc.
逆序肯定环视(?<=exp)
零宽度正回顾后发断言,又称逆序肯定环视,断言自身出现位置的前面能匹配正则表达式 exp
。
比如,以 wor开头的单词的后半部分(除了 wor以外的部分)
正则表达式:(?<=\bwor)\w+\b
匹配的内容:hello world
以上正则表达式会匹配到 ld
假如在一串数字中,每隔3位间加一个逗号(从右边算起):
正则表达式:((?<=\d)\d{3})+\b
匹配内容:1234567890
真正匹配的位置应该是:1,234,567,890
假如,要匹配以空白符间隔的数字(不包括空白符)
正则表达式:(?<=\s)\d+(?=\s)
顺序否定环视(?!exp)
零宽度负预测先行断言,又称顺序否定环视,断言此位置的后面不能匹配表达式 exp
1.匹配3位数组,而且这3位数字的后面不能是数字
正则表达式:\d{3}(?!\d)
2.匹配不包含连续字符串abc的单词
正则表达式:\b((?!abc)\w+)\b
逆序否定环视(?<!exp)
零宽度负回顾后方断言,又称逆序否定环视,可以用(?<!exp)断言此位置的前面不能匹配表达式exp
,例如,前面不是小写字母的7位数字:
正则表达式:(?<![a-z])\d{7}{7}