如何使用Typescript提取字符串中连字符“-”之前的内容?
TypeScript 场景下提取连字符前缀的实现方案
针对形如4-1111、需要提取第一个连字符-之前任意长度字符的场景,可根据业务适配程度选择以下3种类型安全的实现方式:
方案1:极简 split 分割法
适合输入格式固定、无异常输入的临时处理场景,代码最简洁:
const sourceStr = '4-1111'; // 按连字符分割后取数组第一个元素,即为连字符前的内容 const prefix = sourceStr.split('-')[0]; // 输出结果为 "4"
注意:如果输入字符串本身不含连字符,该方法会直接返回原字符串;如果连字符出现在字符串开头,会返回空字符串,符合常规业务预期
方案2:带类型校验的 indexOf + slice 法
适合封装公共工具函数、对接接口返回的不确定类型输入的场景,兼顾TS类型安全和运行时稳定性:
/** * 获取字符串第一个连字符前的全部内容 * @param inputStr 待处理的输入字符串 * @returns 连字符前缀内容 */ const getHyphenPrefix = (inputStr: string): string => { // TS 运行时校验,避免非字符串输入调用方法报错 if (typeof inputStr !== 'string') return ''; const hyphenPosition = inputStr.indexOf('-'); // 未找到连字符时返回原字符串,找到则从起始位置截取到连字符的索引前一位 return hyphenPosition === -1 ? inputStr : inputStr.slice(0, hyphenPosition); }; // 调用示例 const result = getHyphenPrefix('4-1111'); // 得到结果 "4"
该方案性能优于split方法,不需要生成完整的分割数组,处理长字符串时效率更高
方案3:正则匹配法
适合后续可能需要调整匹配规则(比如支持多分隔符、过滤特殊字符)的扩展场景,灵活度更高:
const getHyphenPrefixByRegex = (inputStr: string): string => { if (typeof inputStr !== 'string') return ''; // 非贪婪匹配第一个连字符前的所有内容,通过捕获组直接提取前缀 const matched = inputStr.match(/^(.*?)-/); // 匹配成功取捕获组内容,匹配失败(无连字符)返回原字符串 return matched ? matched[1] : inputStr; };
选型参考
- 临时处理固定格式的字符串:直接用split方法,代码量最少
- 封装公共工具、需要保障运行时稳定性:优先选indexOf+slice的实现
- 后续可能迭代匹配规则:选正则实现,改动成本最低
内容的提问来源于stack exchange,提问作者Leebeedev
相关产品推荐
相关产品推荐

