正则进阶

正则进阶

零宽断言

先行断言

  • 语法:/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]