关于正则表达式的零宽断言(?!、?<!、?=、?<=)
背景
关于正则表达式,相信大部分开发都有所了解,特别是前端开发,经常会用到正则表达式对表单填写内容进行校验。
那么,现在试想一个这样的场景,假设需要使用正则表达式匹配出所有.js结尾的文件名,但是不能包含.min.js结尾的文件名。
这种情况下改如何实现呢?
这时候就用到了正则表达式的零宽断言了。
首先,先看一个正则表达式
/^(?!.*?_$)(?!_)[A-Za-z0-9_]+$/g
这个正则表达式能够匹配出Abc123、AA__dsas,但是不会匹配出_Adfds_。
重点就在于该正则表达式中用到的一种奇怪的写法?!
,没错,这个就是零宽断言的一种了
零宽断言
?!
会排除匹配位置右侧匹配到的项
?<!
会排除匹配位置左侧匹配到的项
?=
会寻找匹配位置右侧包含匹配项的匹配内容
?<=
会寻找