如何让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'
工作原理
- 匹配逻辑:通过
${string}*(${infer A})+${infer Rest}匹配字符串结构:${string}:匹配目标模式前的任意无关内容*(:指定前缀标识infer A:提取前缀和后缀之间的目标字面量)+:指定后缀标识infer Rest:提取后缀之后的剩余字符串,用于后续递归
- 递归合并:每次匹配成功后,将提取到的
A与递归处理剩余字符串Rest的结果合并为联合类型,实现多匹配项的收集 - 终止条件:当剩余字符串中不再包含目标模式时,返回
never终止递归
内容的提问来源于stack exchange,提问作者LY Hooi
相关产品推荐
相关产品推荐

