我创建了一个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')));

答案 0 :(得分:5)
在第一个正则表达式中,您使用的是3组:
这就是为什么你可以参考第1组,第2组和第3组。
但是,在第二个正则表达式中,您使用的是1个重复多次的组,因此第2组和第3组不存在且无法引用: