【问题标题】:Typescript cannot parse named groups in regex打字稿无法解析正则表达式中的命名组
【发布时间】:2019-06-22 11:02:29
【问题描述】:

我有一个代码行

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

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

【问题讨论】:

  • 这似乎适用于jsfiddle 的打字稿,我们需要更多信息...
  • 所以很可能是打字稿的版本错了。我可以在 jsfiddle 中更改打字稿版本吗? @IslamElshobokshy
  • @IslamElshobokshy 顺便说一句,将表达式包装在字符串 (new RegExp("..")) 中有些帮助,因为它似乎关闭了编译时验证。还在测试.​​.
  • 我不认为你可以在 jsfiddle 中更改 typescript 版本,我也在研究它。使用RegExp() 是个好主意,请随时更新:-) 我似乎无法重现,对不起...

标签: regex typescript webpack


【解决方案1】:

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

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

请参阅http://kangax.github.io/compat-table/es2016plus/ 了解兼容性。

Typescript 编译器不是抛出错误的那个,它是你的 webpack 模块加载器。我会尝试将目标设置为 ES2018,看看是否可行。

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

【讨论】:

    【解决方案2】:

    不幸的是,Typescript 本身不支持转换正则表达式本身。见issue #24531

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

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 2023-01-07
      相关资源
      最近更新 更多