在 TypeScript 中,使用正则表达式过滤字符串数组并映射到捕获组的惯用方法是什么?

In TypeScript what is the idiomatic way to filter an array of strings with a regular expression AND map to capturing groups?

我的输入是一个字符串数组lines。我想在 TypeScript 中编写如下代码。

lines
  .filter((line:string) => line.match(/resource "[^"]+"/))
  .map((line:string) => line.match(/resource "([^"]+"/)[1])

坦率地说,我对如何在 TypeScript 中完成这个有点迷茫,这些是一些原因。

  1. 我知道在运行时第二个 match 不会是 null 并且会捕获一些东西到插槽 [1] 中,但是 TypeScript 编译器似乎无法理解这一点出去唠叨我。
  2. 我可以通过第二个 map 操作来解决它,该操作使用三元运算符 ? 来检查 null 或空数组,并且实际上可以正常编译和运行。但是,linter 在 Git 预提交挂钩中抱怨,这告诉我我走错了路。

什么正确的轨道?在 TypeScript 中执行此操作的“正确”方法是什么?谢谢!

首先匹配所有字符串,为简洁起见使用可选链接,然后根据是否匹配进行过滤。

const matches = lines
    .map(line => line.match(/resource "([^"]+")/)?.[1])
    .filter(Boolean) as string[];

但是您对 /resource "([^"]+"/ 的匹配看起来有点可疑 - 您真的要排除第一个 " 而包含第二个吗?或者您可能想要 /resource "([^"]+)"/?