TypeScript无法解析正则表达式中的命名组

时间:2019-01-29 10:31:47

标签: regex typescript webpack

我有一个代码行

regex = /^(?<aa>[0-9]{2})-(?<bb>[0-9]{6})-(?<cc>[0-9]{6})-(?<d>[0-9])$/;

打字稿(或者是webpack?)抱怨:

Module parse failed: Error parsing regular expression: Invalid regular expression: /^(?<aa>[0-9]{2})-(?<bb>[0-9]{6})-(?<cc>[0-9]{6})-(?<d>[0-9])$/: Invalid group (18:23)
    You may need an appropriate loader to handle this file type.

命名组似乎有问题。这是javascript中有效的正则表达式。

我正在使用打字稿2.9.2

我非常喜欢使用命名组。我该怎么做才能使它们编译?

2 个答案:

答案 0 :(得分:1)

根据https://regexr.com/,这实际上不是JavaScript中有效的正则表达式。还有Firefox和Edge。

或者更确切地说,这取决于浏览器。 ES2018已添加对命名组的支持。因此,您的里程可能会有所不同。

有关兼容性,请参见http://kangax.github.io/compat-table/es2016plus/

Typescript编译器不是引发错误的编译器,而是Webpack模块加载器。我会尝试将目标设置为ES2018,看看是否可行。

或者在Named capturing groups in JavaScript regex?上查看有关数组解构的答案。

答案 1 :(得分:0)

不幸的是,Typescript本身不支持编译正则表达式本身。参见(问题#24531)[https://github.com/Microsoft/TypeScript/issues/24531]

如果您还在构建链中使用Babel,请考虑使用plugin-transform-named-capturing-groups-regex