You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让TypeScript从字符串中提取所有匹配模式的字面量?

解决TypeScript字符串中提取所有指定模式字面量的问题

要提取字符串中所有以*(为前缀、)+为后缀的中间字面量,可通过递归条件类型实现遍历匹配,代码如下:

// 递归提取所有符合模式的字面量
type ExtractPattern<T extends string> = 
  T extends `${string}*(${infer A})+${infer Rest}` 
    ? A | ExtractPattern<Rest> 
    : never;

// 测试验证
type Y = ExtractPattern<'g*(a12)+gggggg*(h23)+'>; // 结果:'a12' | 'h23'
type Z = ExtractPattern<'g*(a12)+gggggg*(h23)+gggggg*(5hgf)+'>; // 结果:'a12' | 'h23' | '5hgf'

工作原理

  1. 匹配逻辑:通过${string}*(${infer A})+${infer Rest}匹配字符串结构:
    • ${string}:匹配目标模式前的任意无关内容
    • *(:指定前缀标识
    • infer A:提取前缀和后缀之间的目标字面量
    • )+:指定后缀标识
    • infer Rest:提取后缀之后的剩余字符串,用于后续递归
  2. 递归合并:每次匹配成功后,将提取到的A与递归处理剩余字符串Rest的结果合并为联合类型,实现多匹配项的收集
  3. 终止条件:当剩余字符串中不再包含目标模式时,返回never终止递归

内容的提问来源于stack exchange,提问作者LY Hooi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:52:51