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

如何用JS正则表达式去除字符串中的连续重复字母

去除字符串中连续重复字符(含拉丁重音字符)的正则实现方案

JavaScript 实现

直接使用支持Unicode属性类的正则,通过反向引用匹配连续重复的任意字母(包括带重音的拉丁字符):

const removeConsecutiveDuplicates = (str) => {
  // \p{L} 匹配任意Unicode字母,\1+ 匹配连续重复的该字母,u修饰符开启Unicode支持
  return str.replace(/(\p{L})\1+/gu, '$1');
};

// 测试示例
console.log(removeConsecutiveDuplicates('amoebba')); // 输出: amoeba
console.log(removeConsecutiveDuplicates('aggolli')); // 输出: agoli
console.log(removeConsecutiveDuplicates('zzhhhhjjj')); // 输出: zhj
console.log(removeConsecutiveDuplicates('ççááààãã')); // 输出: çáàã

PHP 实现

PHP中同样利用Unicode属性类和反向引用,配合u修饰符处理Unicode字符:

function removeConsecutiveDuplicates($str) {
  // \p{L} 匹配任意Unicode字母,\1+ 匹配连续重复项,u修饰符确保支持Unicode
  return preg_replace('/(\p{L})\1+/u', '$1', $str);
}

// 测试示例
echo removeConsecutiveDuplicates('amoebba'); // 输出: amoeba
echo removeConsecutiveDuplicates('aggolli'); // 输出: agoli
echo removeConsecutiveDuplicates('zzhhhhjjj'); // 输出: zhj
echo removeConsecutiveDuplicates('ççááààãã'); // 输出: çáàã

核心原理

  • \p{L}:正则的Unicode属性类,匹配任意语言的字母字符,自然包含ç、á、à、ã这类带重音的拉丁字符,无需逐个枚举。
  • (\p{L})\1+:捕获第一个字母,然后匹配后续连续重复的该字母。
  • u修饰符:开启正则的Unicode模式,确保\p{L}等Unicode语法生效,同时正确处理多字节字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:37:15