在 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 中完成这个有点迷茫,这些是一些原因。
- 我知道在运行时第二个
match
不会是 null
并且会捕获一些东西到插槽 [1]
中,但是 TypeScript 编译器似乎无法理解这一点出去唠叨我。
- 我可以通过第二个
map
操作来解决它,该操作使用三元运算符 ?
来检查 null 或空数组,并且实际上可以正常编译和运行。但是,linter 在 Git 预提交挂钩中抱怨,这告诉我我走错了路。
什么是正确的轨道?在 TypeScript 中执行此操作的“正确”方法是什么?谢谢!
首先匹配所有字符串,为简洁起见使用可选链接,然后根据是否匹配进行过滤。
const matches = lines
.map(line => line.match(/resource "([^"]+")/)?.[1])
.filter(Boolean) as string[];
但是您对 /resource "([^"]+"/
的匹配看起来有点可疑 - 您真的要排除第一个 "
而包含第二个吗?或者您可能想要 /resource "([^"]+)"/
?
我的输入是一个字符串数组lines
。我想在 TypeScript 中编写如下代码。
lines
.filter((line:string) => line.match(/resource "[^"]+"/))
.map((line:string) => line.match(/resource "([^"]+"/)[1])
坦率地说,我对如何在 TypeScript 中完成这个有点迷茫,这些是一些原因。
- 我知道在运行时第二个
match
不会是null
并且会捕获一些东西到插槽[1]
中,但是 TypeScript 编译器似乎无法理解这一点出去唠叨我。 - 我可以通过第二个
map
操作来解决它,该操作使用三元运算符?
来检查 null 或空数组,并且实际上可以正常编译和运行。但是,linter 在 Git 预提交挂钩中抱怨,这告诉我我走错了路。
什么是正确的轨道?在 TypeScript 中执行此操作的“正确”方法是什么?谢谢!
首先匹配所有字符串,为简洁起见使用可选链接,然后根据是否匹配进行过滤。
const matches = lines
.map(line => line.match(/resource "([^"]+")/)?.[1])
.filter(Boolean) as string[];
但是您对 /resource "([^"]+"/
的匹配看起来有点可疑 - 您真的要排除第一个 "
而包含第二个吗?或者您可能想要 /resource "([^"]+)"/
?