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

如何实现仅对指定字符(/、-、:)去除相邻重复项?

没问题!我来帮你修改这个方法,让它只针对/、-、:这三个字符处理相邻重复项,其他字符的连续重复会被完整保留~

解决方案

我们有两种实用的方式来实现这个需求,你可以根据自己的习惯选择:

方法一:正则表达式(简洁高效)

正则表达式可以快速匹配目标字符的连续重复项,并用单个字符替换。核心思路是只捕获/、-、:的连续重复序列,其他字符完全不处理。

代码示例

function singleOccurrence(str) {
  // 正则说明:
  // ([\/\-:]) 捕获组:匹配 /、-、: 中的任意一个
  // \1+ 匹配和捕获组相同的连续重复字符
  // g 全局匹配,替换所有符合条件的序列
  return str.replace(/([\/\-:])\1+/g, '$1');
}

测试验证

  • singleOccurrence("1//2/2018") → 返回 "1/2/2018"
  • singleOccurrence("11//2/2018") → 返回 "11/2/2018"(数字1的连续重复被保留)
  • singleOccurrence("2024--05::20") → 返回 "2024-05:20"
  • singleOccurrence("aa--bb::cc") → 返回 "aa-bb:cc"(字母的连续重复被保留)

方法二:字符串遍历(直观可控)

如果你不想用正则,或者需要更精细的逻辑控制,可以通过遍历字符串的方式实现。核心思路是逐个检查字符,仅当当前字符是目标字符且和上一个字符重复时跳过。

代码示例

function singleOccurrence(str) {
  // 用Set存储需要去重的目标字符,方便快速判断
  const targetChars = new Set(['/', '-', ':']);
  const result = [];

  for (const char of str) {
    // 只有当当前字符是目标字符,且和结果最后一个字符相同时,才跳过添加
    if (targetChars.has(char) && result.at(-1) === char) {
      continue;
    }
    result.push(char);
  }

  return result.join('');
}

逻辑解释

  1. 用Set存储目标字符,判断字符是否属于去重范围的效率更高
  2. 遍历输入字符串的每个字符
  3. 如果当前字符是目标字符,且和结果数组的最后一个字符重复,就跳过该字符
  4. 否则将字符添加到结果数组,最后拼接成字符串返回

这个方法逻辑清晰,后续如果需要调整目标字符,只需要修改targetChars集合即可。

内容的提问来源于stack exchange,提问作者Luke C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:36:48