代码之家  ›  专栏  ›  技术社区  ›  temporary_user_name

为什么这个正则表达式的第二部分不匹配[[副本]

  •  3
  • temporary_user_name  · 技术社区  · 6 年前

    var re = /\d(\d)/g;
    var str = '123';
    var match;
    var results = [];
    
    while (match = re.exec(str)) {
      results.push(+match[1]);
    }
    console.log(results);

    而不是 [2, 3] 正如我所预料的,它只会 [2] 23 匹配正则表达式并给出 3 作为捕获组?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Varinder Singh    6 年前

    这是因为字符串 12 在第一轮的比赛中是匹配的 exec ,捕获括号 2 附于 results lastIndex re 对象更新为

    第二轮 执行官 re.lastIndex 2. 2. 所以 重新 3 这显然与模式不符 /\d(\d)/ null ,而循环退出并 数组只包含

        2
  •  0
  •   user557597 user557597    6 年前

    var re = /\d(?=(\d))/g;
    var str = '123';
    var match;
    var results = [];
    
    while (match = re.exec(str)) {
      results.push(+match[1]);
    }
    console.log(results);