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

时间:2016-07-08 21:20:54

标签: 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')));




1 个答案:

答案 0 :(得分:5)

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

Regular expression visualization

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

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

Regular expression visualization