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

JavaScript正则split连续字符问题(对比Java)

解决JavaScript中拆分连续相同字符的问题

一、修复原split正则的问题

JavaScript的split()方法如果使用包含捕获组的正则作为分隔符,会将捕获组匹配的内容插入到结果数组中,这就是你得到多余字符的原因。以下两种方案可以解决这个问题:

方案1:调整正则,避免捕获组混入结果

将捕获组移到正向预查内部,这样split()不会把捕获组内容加入结果数组,同时保留反向引用的逻辑:

'aaabbbccccdd'.split(/(?=(.)(?!\1))/g)
// 返回 ["aaa", "bbb", "cccc", "dd"]

这个正则匹配的是「后面的字符与当前位置的下一个字符不同」的零宽位置,刚好对应连续相同字符组的末尾,拆分后不会引入多余内容。

方案2:用match()替代split()(更推荐)

直接匹配所有连续相同的字符组,逻辑更直观,代码更简洁:

'aaabbbccccdd'.match(/(.)\1*/g)
// 返回 ["aaa", "bbb", "cccc", "dd"]

正则逻辑:匹配任意字符,再匹配任意数量(含0个)的相同字符,直接提取所有连续相同字符组。如果字符串为空,需处理null结果:

const str = 'aaabbbccccdd';
const result = str.match(/(.)\1*/g) || [];

二、非正则方法拆分连续相同字符

如果不想使用正则,可以通过遍历字符串实现:

function splitConsecutiveChars(str) {
  if (!str) return [];
  const result = [];
  let currentChar = str[0];
  let currentGroup = currentChar;
  
  for (let i = 1; i < str.length; i++) {
    if (str[i] === currentChar) {
      currentGroup += str[i];
    } else {
      result.push(currentGroup);
      currentChar = str[i];
      currentGroup = currentChar;
    }
  }
  result.push(currentGroup);
  return result;
}

// 调用示例
splitConsecutiveChars('aaabbbccccdd'); // ["aaa", "bbb", "cccc", "dd"]

该方法通过逐个比较字符,将连续相同的字符合并为一组,最后收集所有组返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:15:39