为什么这个 RegExp 没有按预期工作?
Why doesn't this RegExp work as expected?
我制作了一个 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, '--')));
// ???
console.log(data.map(datum => datum.replace(/^m_(?:(\d+)_?){3}$/g, '--')));
在第一个正则表达式中,您使用了 3 个组:
这就是您可以参考第 1、2 和 3 组的原因。
但是,在第二个正则表达式中,您多次重复使用 1 个组,因此第 2 组和第 3 组不存在且无法引用:
我制作了一个 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, '--')));
// ???
console.log(data.map(datum => datum.replace(/^m_(?:(\d+)_?){3}$/g, '--')));
在第一个正则表达式中,您使用了 3 个组:
这就是您可以参考第 1、2 和 3 组的原因。
但是,在第二个正则表达式中,您多次重复使用 1 个组,因此第 2 组和第 3 组不存在且无法引用: