You need to enable JavaScript to run this app. 如何使用Typescript提取字符串中连字符“-”之前的内容?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 14:45:03