正则表达式中的的向前匹配、向后匹配、负向前匹配、负向后匹配写法

比如我们要匹配下面这个语句中的“<”后面不是“br>”的“<”:
line1

 

这个正则表达式这么写:

/<(?!br>)/

如果我们只匹配后面为“br>”的“<”呢,正则表达式这么写:

/<(?=br>)/

这两种语法在正则表达式中称之为:
(?=pattern) 零宽正向先行断言
(?!pattern) 零宽负向先行断言
断言的意思是判断是否满足, 零宽的意思是它只匹配一个位置,如同^匹配开头,$匹配末尾一样,只是一个位置,不返回匹配到的字符, 正向表示需要满足pattern, 负向表示不能满足pattern, 先行表示这个断言语句现在期望返回的匹配字符的后面。

我们在来假设一个需求,如果我要匹配不在“
”中的“>”,也就是说只匹配“
”、“
”中的“>”,而不匹配“
”中的“>”,那么要写的正则表达式就是“匹配前面没有''”,写法如下:
/(?/

对应的如果只匹配“
”中的“>”,而不匹配“
”或者“
”中的“>”,就这么写:
/(?<=/

这两种语法在正则表达式中称之为:
(?<=pattern) 零宽正向后行断言
(? 与先行断言的意思一样,只不过后行断言写在需要匹配的字符的前面,表示如果前面的字符满足pattern就返回。
但是很遗憾的是javascript中并不支持这种后行断言。

那如果在javascript中我们想将“
”和“
”中的“>”替换成“>”,但是不影响“
”中的“>”,那怎么写呢,先看代码:
var s = "
line1

"; var r = /(/g; s.replace(r, function($0, $1) { return $1?"":">";});

这里用到了replace函数的第二个参数,这个参数可以是一个值,也可以是一个函数,这个函数需要返回一个用于替换匹配结果的字符串,所以我们就可以利用这个函数的处理功能处理匹配到的结果,上面这个语句的意思就是使用“r”来匹配“s”,匹配之后“$0”中保存匹配到的完整结果,“$1”中匹配到“”前面有“”前面没有“

你可能感兴趣的:(综合,html,javascript)