首先看一下最简单的代码

1
2
3
const r = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;
r.exec('2019-10-08');
console.log(RegExp.$1); // 2019

上面这段代码在 Chrome console 中执行结果为 2019,一切正常。

1
2
3
4
5
eval(`
const r = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;
r.exec('2019-10-08');
RegExp.$1;
`); // ''

重新打开一个 Chrome console, 然后执行上面这段代码,结果为空字符串, 经过查阅资料,发现在 eval 中执行 regx的字面量时,需要额外转义反斜线,即:

1
2
3
4
5
eval(`
const r = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/;
r.exec('2019-10-08');
RegExp.$1;
`); // '2019'

参考资料:

  1. https://stackoverflow.com/a/61147060/11394539