You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将字符串按连续重复字母进行分组分割?

解决连续重复字符分组的问题

嘿,我懂你要实现的需求了——把字符串里连续重复的字母归为一组,而不是split("")那样拆成单个字符对吧?刚好这个需求用JavaScript有两种很实用的解法,我给你详细说说:

方法一:正则表达式 + match()(最简洁)

JavaScript的match()方法配合特定正则,可以直接捕获所有连续重复的字符组。这里用到的正则是/(.)\1*/g,我给你拆解下:

  • (.):捕获任意单个字符,存为第一个捕获组
  • \1*:匹配和第一个捕获组相同的字符,*表示可以重复0次或多次(这样单个字符也会被匹配到)
  • g:全局匹配,不会只返回第一个匹配结果

直接上代码:

const str = "MBAMMDXXMMMGGMMZ";
// 得到分组后的数组
const groupedArray = str.match(/(.)\1*/g);
console.log(groupedArray); 
// 输出: ["M","B","A","MM","D","XX","MMM","GG","MM","Z"]

// 如果要转成你想要的空格分隔字符串
const formattedStr = groupedArray.join(" ");
console.log(formattedStr);
// 输出: "M B A MM D XX MMM GG MM Z"

方法二:手动遍历(更直观,适合自定义逻辑)

如果你不想用正则,或者需要更灵活的分组规则,手动遍历字符串也是个好办法。思路就是逐个检查字符,和当前组的最后一个字符对比,相同就追加,不同就新建组:

const str = "MBAMMDXXMMMGGMMZ";
const groupedArray = [];

// 处理空字符串的边界情况
if (str.length === 0) {
  console.log(groupedArray);
  return;
}

// 初始化第一个组
let currentGroup = str[0];

for (let i = 1; i < str.length; i++) {
  // 对比当前字符和当前组的最后一个字符
  if (str[i] === currentGroup[currentGroup.length - 1]) {
    currentGroup += str[i];
  } else {
    // 不同的话,把当前组加入结果,再新建组
    groupedArray.push(currentGroup);
    currentGroup = str[i];
  }
}
// 别忘了把最后一个组加入结果
groupedArray.push(currentGroup);

console.log(groupedArray); // 同样得到目标数组
const formattedStr = groupedArray.join(" ");
console.log(formattedStr); // 得到空格分隔的字符串

两种方法都能完美实现你的需求,正则写法更简洁,手动遍历则更容易调整逻辑(比如如果之后要处理数字或者特殊字符的分组,改起来更方便)。

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

火山引擎 最新活动