javascript - RegExpExecArray.groups == 在角度库中调用时未定义
问题描述
我创建了一个包含视频播放器的角度库。在库中,我使用带有命名捕获组的正则表达式。但是在使用库时,我可以看到RegExpExecArray.groups
是undefined
:
这是从 Angular 库中调用的以下代码的结果:
let input = 'https://www.youtube.com/watch?v=UqQ9NWzIiM4';
let test = new RegExp(/http[s]{0,1}:\/\/(www\.){0,1}youtube\.com\/watch\?v=(?<id>[^&]+)/, 'g').exec(input);
console.log('test', test);
现在,当我在我的 Angular 应用程序中使用完全相同的代码片段时,结果如下:
let matches = new RegExp(/http[s]{0,1}:\/\/(www\.){0,1}youtube\.com\/watch\?v=(?<id>[^&]+)/, 'g')
.exec('https://www.youtube.com/watch?v=UqQ9NWzIiM4');
console.log('matches', matches);
为什么RegExpExecArray.groups == undefined
当我在角度库中使用它时?
该库的代码托管在 Github 上:
- 库的代码
- 角度应用程序的代码:
我强烈怀疑我的tsconfig
文件是罪魁祸首,但是我已经尝试过将它们相同,但没有运气。
角度库tsconfig.json
{
"compilerOptions": {
"target": "es2015",
"types": [ "node" ],
"lib": ["dom", "es2018"]
}
}
角度应用tsconfig.json
{
"compilerOptions": {
"module": "es2020",
"target": "es2015",
"lib": [
"es2018",
"dom"
]
}
}
解决方案
我怀疑这里存在“双重转义”问题。当系统首先解析字符串并在特殊字符处用转义字符填充时,就会发生这种情况;'/', '?', ... 然后再次对照正则表达式检查它。
为此,您可以String.raw
在 daggers ` 中使用后跟内容来玩这个技巧:
let input = String.raw`https://www.youtube.com/watch?v=UqQ9NWzIiM4`;
let test = new RegExp(/http[s]{0,1}:\/\/(www\.){0,1}youtube\.com\/watch\?v=(?<id>[^&]+)/, 'g').exec(input);
console.log('test', test);
推荐阅读
- python - Python在循环混淆中生成随机数
- sql - Sybase中JOIN和Inner JOIN的区别
- flutter - 在 userQuestion 和 userAnswer 中出现错误
- mysql - 为什么 SQL 查询在选择查询中使用反引号时返回表数据?
- react-native - 无法使用 XCode 8.3 运行反应原生应用程序
- perl - 从 perl 字符串中删除特殊字符
- node.js - 为什么 npm 在尝试根据 nodejs 安装软件包时会抛出“einvalidtagnme”错误?
- python - 在 django for 循环中解析字典数组
- linux - OpenSSL 如何选择使用哪个 ENGINE?
- mysql - Microsoft Visual C++ Redistributable setup 失败未指定错误 [0x80240017]