dotAll s 修饰符

让点可以真正匹配任意单个字符

  1. const reg = /./
  2. console.log(reg.test('5')) // true
  3. console.log(reg.test('x')) // true
  4. console.log(reg.test('\n')) // 换行符 false
  5. console.log(reg.test('\r')) // 回车 false
  6. console.log(reg.test('\u{2028}')) // 行分隔符 false
  7. console.log(reg.test('\u{2029}')) // 段分隔符 false
  8. const reg2 = /./s
  9. console.log(reg2.test('5')) // true
  10. console.log(reg2.test('x')) // true
  11. console.log(reg2.test('\n')) // true
  12. console.log(reg2.test('\r')) // true
  13. console.log(reg2.test('\u{2028}')) // true
  14. console.log(reg2.test('\u{2029}')) // true

g 全局匹配
i 忽略匹配
m 跨行匹配
y 粘性的
u 匹配Unicode

具名组匹配

对日期的匹配测试

  1. const date = /(\d{4})-(\d{2})-(\d{2})/.exec('2020-01-01')
  2. console.log('date', date)

image.png
这里group是没有数据的

通过 ?<>来设置 group的key

  1. const reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
  2. console.log(reg.exec('2020-02-01'))\
  3. const groups = reg.exec('2020-02-01').groups
  4. const {year, month, day} = groups
  5. console.log(year, month, day) // 2020 02 01

image.png

先行断言&后行断言

  1. const str = 'ecmascript'
  2. console.log('先行断言', str.match(/ecma(?=script)/))
  3. console.log('先行断言, 非', str.match(/ecma(?!script)/))
  4. console.log('后行断言', str.match(/(?<=ecma)script/))
  5. console.log('后行断言,非', str.match(/(?<!ecma)script/))

image.png