如何从 Typescript 中的正则表达式 exec 匹配访问组? [复制]

Posted

技术标签:

【中文标题】如何从 Typescript 中的正则表达式 exec 匹配访问组? [复制]【英文标题】:How can I access groups from a regex exec match in Typescript? [duplicate] 【发布时间】:2019-03-28 00:13:31 【问题描述】:

我在尝试时收到Property 'groups' does not exist on type 'RegExpExecArray'

const r = /\w+, (?<foo>\w+)/
const m = r.exec('hello, world')

if (m) 
    const groups = m.groups

javascript 可以选择在正则表达式执行结果上调用.groups。而且我知道输出实际上是一个数组......但是抓住一个特定的索引来获取组似乎有点hacky。从列表中拉出是 Typescript 中的唯一选项吗?

【问题讨论】:

你试过了吗:m[1]? 嗯,忘记了数组的顺序......在这种情况下应该没问题。但是,如果你想访问键值版本 FeelsBadMan 这已被错误地标记为相关 JS 问题的重复。 RegExpExecArray 缺少 TS 中 groups 属性的类型定义。 @Keith 是对的。我知道“groups”属性是可选的,不将其添加到RegExpMatchArray 可能是可以理解的,但由于它是Array,如果我使用m["groups"] TS 会生成错误Element implicitly has an 'any' type because index expression is not of type 'number'. 如果我使用m.groups,然后我得到了Property 'groups' does not exist on type 'RegExpMatchArray'. 显然,它已经在 typescript 2.8 (github.com/Microsoft/TypeScript/issues/22082) 中报告和修复。 【参考方案1】:

m[1] 将带来“世界”。

您可以使用 m['groups'] 访问组。

if (m) 
 const groups = m['groups'];

因为如果你 console.log / debug at m 你可以看到,groups 是结果中的一个对象。如果您知道属性名称,上面提到的是访问对象的更具体的方法。

【讨论】:

以上是关于如何从 Typescript 中的正则表达式 exec 匹配访问组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从正则表达式中提取多个值?

从字符串 Typescript 中删除非英语 [重复]

如何同时进行 Typescript 正则表达式替换和提取值?

如何在 Typescript 中定义正则表达式匹配的字符串类型?

bigquery 中的正则表达式

正则表达式和 PHP - 从 img 标签中隔离 src 属性