如何将PHP重复字符剔除正则迁移至JavaScript并实现高效运行
JavaScript 实现单词内连续重复字符去重(保留全重复单词)
问题分析
你原有的PHP正则用到了\K(重置匹配位置)和预查内的反向引用,这些语法在JavaScript正则中不支持,所以无法直接移植。需求核心是:按空格分割的单词中,仅去除非全重复单词内部的连续重复字符,全重复单词(如xxx)保持原样。
高效解决方案
以下是兼顾可读性和性能的实现,适合处理千字符级字符串:
function deduplicateChars(str) { return str.replace(/\b[a-z]+\b/g, word => { // 快速判断单词是否由单一字符重复组成 if (/^([a-z])\1+$/.test(word)) { return word; } // 移除单词内连续重复的字符 return word.replace(/(.)\1+/g, '$1'); }); }
测试验证
// 示例1 console.log(deduplicateChars('aaa baaab xxx')); // 输出:"aaa bab xxx" // 示例2 console.log(deduplicateChars('ahhj aaab cc iiik')); // 输出:"ahj ab cc ik"
效率说明
- 单词匹配:用
\b[a-z]+\b快速定位所有单词,正则引擎的线性扫描效率极高; - 全重复判断:通过
^([a-z])\1+$正则直接校验,比手动遍历字符串更快; - 去重操作:
(.)\1+匹配连续重复字符,替换为单个字符,是正则引擎优化过的原生操作,性能优于手动循环处理。
内容的提问来源于stack exchange,提问作者Samul
相关产品推荐
相关产品推荐

