如何用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
相关产品推荐
相关产品推荐

