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

求正则表达式:保留字符串前两个有效连字符并格式化数字

解决方案

可以通过分步处理来实现需求,以下是具体的JavaScript代码实现:

function processString(str) {
  // 1. 移除开头的非数字字符(比如示例中的d)
  let temp = str.replace(/^[^0-9]+/, '');
  // 2. 将连续的多个连字符合并为单个连字符
  temp = temp.replace(/-+/g, '-');
  // 3. 拆分字符串并重组,保留前两个连字符,后续连字符替换为直接拼接数字
  const parts = temp.split('-');
  if (parts.length <= 2) {
    return temp;
  }
  return `${parts[0]}-${parts[1]}-${parts.slice(2).join('')}`;
}

// 测试示例
console.log(processString('d333-4444-555--5---5-')); // 输出:333-4444-55555
console.log(processString('d333--4444-555--5---5-')); // 输出:333-4444-55555

步骤说明

  • 第一步:用/^[^0-9]+/匹配字符串开头所有非数字字符并移除,确保从有效数字开始。
  • 第二步:用/-+/g匹配所有连续的连字符,替换为单个连字符,统一连字符格式。
  • 第三步:将处理后的字符串按连字符拆分为数组,若数组长度大于2,就把前两个部分用连字符连接,后面所有部分直接拼接成一串数字;若长度不足2,直接返回处理后的字符串即可。

你之前写的replace(/[^0-9]/g, '')会把所有非数字字符(包括连字符)全部移除,所以才会和预期结果差距很大,上面的分步处理可以精准控制连字符的保留数量。

内容的提问来源于stack exchange,提问作者Ivanov Viktor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:40:18