比如我们要匹配下面这个语句中的“<”后面不是“br>”的“<”:
<div>line1</div> <br>
这个正则表达式这么写:
/<(?!br>)/
如果我们只匹配后面为“br>”的“<”呢,正则表达式这么写:
/<(?=br>)/
这两种语法在正则表达式中称之为:
断言的意思是判断是否满足,零宽的意思是它只匹配一个位置,如同^匹配开头,$匹配末尾一样,只是一个位置,不返回匹配到的字符,正向表示需要满足pattern,负向表示不能满足pattern,先行表示这个断言语句现在期望返回的匹配字符的后面。
我们在来假设一个需求,如果我要匹配不在“<br>”中的“>”,也就是说只匹配“<div>”、“</div>”中的“>”,而不匹配“<br>”中的“>”,那么要写的正则表达式就是“匹配前面没有’<br‘的’>‘”,写法如下:
/(?<!<br)>/
对应的如果只匹配“<br>”中的“>”,而不匹配“<div>”或者“</div>”中的“>”,就这么写:
/(?<=<br)>/
这两种语法在正则表达式中称之为:
<=pattern) 零宽正向后行断言<!pattern) 零宽负向后行断言与先行断言的意思一样,只不过后行断言写在需要匹配的字符的前面,表示如果前面的字符满足pattern就返回。
但是很遗憾的是javascript中并不支持这种后行断言。