正则表达式断言讲解 JavaScript版

本文详细介绍了正则表达式中的断言概念,包括先行断言与后行断言,以及它们的否定形式,并提供了JavaScript语言的具体示例。

正则表达式中限制被匹配内容前后是否应该有指定内容的功能,叫做断言,这里通过javascript这门语言来举例讲解。

断言的类型分为先行(否定)断言和后行(否定)断言,而在javascript这么语言中,在es2018之前,是不支持后行(否定)断言的,支持后行断言是在es6被提出,在v8的4.9版(chrome62)这点要做低版本浏览器兼容的时候,需要注意。基本就是目前大多数浏览器都不支持,所以慎重使用。

先行断言的意思是,被匹配内容只有在指定字符串前面才能匹配,格式为/被匹配内容(?=后面必须跟的内容)/

例如你要替换掉字符串中数字跟着百分号的部分

var before = "aaa123%ad121dfakm".replace(/\d+(?=%)/g,'');

最终before的内容为aaa%ad121afakm,这里要注意断言部分不会被替换掉哦。

先行否定断言的意思和先行断言正相反,被匹配的内容只有不在指定字符串前面才能被匹配。

还是上面那个例子,你要替换带字符串中不在百分号之前数字

var notbefore = "aaa123%ad121dfakm".replace(/\d{0,}(?!%)/g,'');

然后你就惊奇的发现,卧槽结果notbefore最终是aaa3%addfakm,虽然其他位置的数字被替换掉了,但是123%最终12部分也被替换掉了,怎么办呢?依旧使用后行否定断言进行限制

var notbefore = "aaa123%ad121dfakm".replace(/(\d{0,}(?!%))(?!\d)/g,'');

最终结果为 aaa123%addfakm 这是我们最终想要的格式,至于为什么,根据我上面讲解的先行否定断言内容自己思考下啦。

 

接下来是后行(否定)断言

后行断言指的是被匹配内容只有在指定内容之后才会被匹配到,格式为/(?<=指定内容)被匹配内容/

这里举一个例子,例如你要替换掉冒号后面的斜杠为单斜杠

var after = 'http://aaa//wrwrw//12323//'.replace(/(?<=:)\/+/g,'/')

这里最终after的结果就是 http:/aaa//wrwrw//12323// 冒号后面的双斜杠被替换成单斜杠了

 

后行否定断言则正相反,被匹配的内容只有不在指定内容之后才会被匹配到,格式为/(?<!指定内容)被匹配内容/

依旧是上面那个例子,你要替换掉不跟在冒号后面的多斜杠为单斜杠

var notafter = 'http://aaa//wrwrw//12323//'.replace(/(?<!:)\/+/g,'/')

最终notafter的结果为http://aaa/wrwrw/12323/

 

以上就是我对断言的粗略讲解,另外,正则表达式的匹配是很奇妙的,例如上面后行(否定)断言的两个例子,你把多斜杠替换成空字符串,还是会出现不是你预期的结果,就像正向否定断言那个例子一样,想要更深层次的学习,就需要自己思考了。

 

另外如果内容有错误,希望大家指正,谢谢

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值