我想对字符串应用Reg表达式。为了获得所有组的结果,我使用matchAll方法。这是我的代码
const regexp = RegExp('foo*','g');
const str = "table football, foosball";
let matches = str.matchAll(regexp);
for (const match of matches) {
console.log(match);
}
在上面的代码编译期间我出错了
类型““桌上足球,桌上足球”不存在属性'matchAll'
在搜索此错误期间,我在stackoverflow上发现了类似的问题
TS2339: Property 'includes' does not exist on type 'string'
我更改了上面链接中提到的tsconfig配置,但是我的问题没有解决
这是我的tsconfig代码;
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"importHelpers": true,
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "es2015",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2016",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
}
}
答案 0 :(得分:16)
String.prototype.matchAll()是ECMAScript 2020规范(草稿)的一部分。
在TypeScript中,您可以通过在编译器选项中添加SSL
或es2020
来包括这些库功能:
es2020.string
答案 1 :(得分:2)
matchAll
不是string
类的方法,而是RegExp
类的方法,因此,如果要使用该方法,只需将字符串作为参数传递而不是传递RegExp变量。就您而言
regexp.matchAll(str)
中的更多信息
编辑:
我没有读过字符串原型,现在我读了它,我意识到您的问题。检查String
和RegExp
类的ts签名,我意识到matchAll
没有签名。一种解决方法是:
let matches = str['matchAll'](regexp);