为什么这个RegExp没有按预期工作?

Pat*_*rts -1 javascript regex replace capturing-group

我做了一个RegExp格式化传入的日期字符串,但它没有按我的用法预期工作.我希望有人可以解释为什么不:

var data = [
  "m_2013_01_01",
  "m_2013_02_01",
  "m_2013_03_01",
  "m_2013_04_01"
];

// why aren't these equivalent?
//  expected
console.log(data.map(datum => datum.replace(/^m_(\d+)_(\d+)_(\d+)/g, '$1-$2-$3')));
//  ???
console.log(data.map(datum => datum.replace(/^m_(?:(\d+)_?){3}$/g, '$1-$2-$3')));
Run Code Online (Sandbox Code Playgroud)

Fed*_*zza 5

在第一个正则表达式中,您使用3组:

正则表达式可视化

这就是为什么你可以参考第1组,第2组和第3组.

但是,在第二个正则表达式中,您使用的是1个重复多次的组,因此第2组和第3组不存在且无法引用:

正则表达式可视化