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

JavaScript高效替换随机字符串中相邻重复短语的方法

解决相邻重复短语替换问题

原代码的问题

你的正则表达式/(\b\w+\b)\s+\1/g存在三个关键缺陷:

  • 仅匹配单个单词且空格分隔的重复,无法处理无空格直接拼接的重复(如FounderFounder)
  • \w+只能匹配字母、数字和下划线,无法覆盖包含空格、连字符、特殊符号的完整短语(如2015 - Present · 8 yrs)
  • 单词边界\b在包含非单词字符的短语中会失效,导致匹配完全失败

修正方案

调整正则表达式,同时支持无空格拼接和空格分隔的相邻重复短语匹配,并兼容包含特殊符号的短语:

function replaceDuplicateSubstrings(string) {
    // 匹配两种相邻重复场景:直接拼接的重复 / 空格分隔的重复
    // 非贪婪捕获避免过度匹配,确保精准定位重复短语
    const regex = /(.+?)(?:\s+)?\1/g;
    return string.replace(regex, "$1 |");
}

// 测试示例
const exampleString = "FounderFounder Breakthrough Energy Breakthrough Energy 2015 - Present · 8 yrs2015 - Present · 8 yrs";
console.log(replaceDuplicateSubstrings(exampleString));
// 输出:"Founder | Breakthrough Energy | 2015 - Present · 8 yrs |"

正则说明

  • (.+?):非贪婪捕获任意字符(至少1个),精准定位需要匹配的原短语
  • (?:\s+)?:可选非捕获组,匹配0或多个空格,兼容有空格分隔的重复场景
  • \1:反向引用捕获组内容,匹配与原短语完全相同的重复部分
  • /g:全局模式,替换所有符合条件的重复内容

优化建议

如果需要限制匹配的字符范围(避免误匹配部分重复的零散字符),可以将捕获组调整为更具体的规则,比如针对示例中的字符类型:

// 仅匹配包含字母、数字、空格、连字符、中间点的短语
const regex = /([\w\s\-·]+?)(?:\s+)?\1/g;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:05:18