1. .exec(str)

  • 如果用该方法进行匹配在进行第二次匹配的时候会从第一次结束的位置开始匹配
  • 返回值: 一个类数组第一个是就是匹配到的字符

let rstr = 'aaa_aa_a';
let r1 = /a+/g;

// 如果用exec方法进行匹配 在进行第二次匹配的时候会从第一次结束的位置开始匹配
console.log(r1.exec(rstr));  // ["aaa", index: 0, input: "aaa_aa_a", groups: undefined]
console.log(r1.exec(rstr));  // ["aa", index: 4, input: "aaa_aa_a", groups: undefined]
console.log(r1.exec(rstr));  // ["a", index: 7, input: "aaa_aa_a", groups: undefined]

2. /y

  • 要搭配.exec(str)使用才有效果不然和/g的匹配到的东西是一样的
  • 和/g用法差不多就是在匹配第二次的时候str一定要与xxx开头(就是额外添加了一个正则标识符^)

let rstr = 'aaa_aa_a';
let r1 = /a+/y;

console.log(r1.exec(rstr));  // ["aaa", index: 0, input: "aaa_aa_a", groups: undefined] -> 第一次匹配和/g的输出一样
console.log(r1.exec(rstr));  // null -> 第二次匹配结果是null因为是以_开头不是以a开头 // 第二次匹配项一定要以a开头