Skip to content
  • ?: 表示分组的值不捕获 ,但会消耗字符

  • 命名分组

    // 11-22 -> 22-11
    console.log('11-22'.replace(/(?<x>\d{2})-(?<y>\d{2})/,'$<y>-$<x>'))
    
  • 正向肯定:往前看就是往右看,必须跟着什么东西。?=不消耗字符(只看不吃)

    console.log('1a'.match(/\d(?=[a-z])[a-z]/)) //[ '1a', index: 0, input: '1a', groups: undefined ]
    console.log('1ab'.match(/\d(?=[a-z]{2})[a-z]/)) //[ '1a', index: 0, input: '1ab', groups: undefined ]
    console.log('1a'.match(/\d(?=[a-z]{2})[a-z]/)) // null
    console.log('1a'.match(/\d(?:[a-z])[a-z]/)) //null 
    
  • 正向否定 ?!

    console.log('1a'.match(/\d(?![A-Z])[a-z]/)) //[ '1a', index: 0, input: '1a', groups: undefined ]
    
  • 反向肯定 向左看 ?<=

    console.log('c2a'.match(/(?<=[a-z])\d[a-z]/)) //[ '2a', index: 1, input: 'c2a', groups: undefined ]
    

    反向否定 向左看 ?<!

  • console.log('A2a'.match(/(?<![a-z])\d[a-z]/))