正则进阶
零宽断言
先行断言
- 语法:
/reg1(?=reg2)/ - 含义:
/(?=reg2)/本身在正则中不占位,它所在的位置的后面要有reg2 - 作用:匹配reg1,同时后面要有reg2
- 举例:
1 | /[a-z]*(?=t)/.exec('got it') // ["go", index: 0, input: "got it", groups: undefined] |
后发断言
- 语法:
/(?<=reg2)reg1/ - 含义:
/(?=reg2)/本身在正则中不占位,它所在的位置的前面要有reg2 - 作用:匹配reg1,同时前面要有reg2
- 举例:
1 | /(?<=o)[a-z]{5}/.exec('do youself') // ["uself", index: 5, input: "do youself", groups: undefined] |
负向零宽断言
负向零宽先行断言
- 语法:
/reg1(?!reg2)/ - 含义:
/(?!reg2)/本身在正则中不占位,它所在的位置的后面不能有reg2 - 作用:匹配reg1,同时后面不能有reg2
- 举例:
1 | /[a-z]*(?!a)/.exec('ayiayaiya') // ["go", index: 0, input: "got it", groups: undefined] |
负向零宽后发断言
- 语法:
/(?<!reg2)reg1/ - 含义:
/(?<!reg2)/本身在正则中不占位,它所在的位置的前面不能有reg2 - 作用:匹配reg1,同时前面不能有reg2
- 举例:
1 | /[a-z]*(?<!ing)/.exec('aing ain ai a') // ["ain", index: 0, input: "aing ain ai a", groups: undefined] |