如何从 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 正则表达式替换和提取值?