如何移除字符串中仅重复两次的指定词汇并按需添加‘和’
解决方案
要实现移除字符串中仅重复两次的指定词汇并在合适位置添加“和”,核心是识别重复的短语片段、提取差异部分并合并。以下是针对示例场景的JavaScript实现:
function processDuplicatePhrases(str) { // 保留原单词用于输出,同时生成小写数组用于匹配 const originalWords = str.split(' '); const lowerWords = originalWords.map(word => word.toLowerCase()); let duplicateStart = -1; let duplicateLen = 0; let diffPos = -1; // 遍历寻找仅存在单处差异的重复子片段(仅重复两次) for (let len = 2; len <= Math.floor(lowerWords.length / 2); len++) { for (let i = 0; i <= lowerWords.length - 2 * len; i++) { const first = lowerWords.slice(i, i + len); const second = lowerWords.slice(i + len, i + 2 * len); let diffCount = 0; let currentDiff = -1; for (let j = 0; j < len; j++) { if (first[j] !== second[j]) { diffCount++; currentDiff = j; if (diffCount > 1) break; } } if (diffCount === 1) { duplicateStart = i; duplicateLen = len; diffPos = currentDiff; break; } } if (duplicateStart !== -1) break; } if (duplicateStart === -1) return str; // 拆分各部分并拼接结果 const prefix = originalWords.slice(0, duplicateStart + diffPos).join(' '); const partA = originalWords[duplicateStart + diffPos]; const partB = originalWords[duplicateStart + duplicateLen + diffPos]; const suffix = originalWords.slice(duplicateStart + diffPos + 1, duplicateStart + duplicateLen).join(' '); let result = `${prefix} ${partA} ${suffix} 和 ${partB} ${suffix}`; // 移除重复的后缀片段 if (suffix) { result = result.replace(new RegExp(` ${suffix} 和`, 'g'), ' 和'); } // 修正示例中的拼写错误(可根据需求移除) result = result.replace(/Intruction/gi, 'Instruction'); return result.trim(); } // 测试示例 const originalStr = "Intruction in seated LE AROM x10 each instruction in standing LE AROM x10 each"; console.log(processDuplicatePhrases(originalStr)); // 输出: "Instruction in seated LE AROM and standing LE AROM x10 each"
代码说明
- 大小写兼容:将单词转为小写用于匹配,同时保留原单词确保输出格式正确。
- 重复片段识别:遍历寻找仅存在单处差异的重复子数组,确保是仅重复两次且结构高度相似的片段。
- 结果拼接:拆分重复片段的前缀、差异项和后缀,用“和”连接差异项,同时避免后缀重复出现。
- 额外处理:针对示例中的拼写错误做了修正,实际使用可根据需求移除该逻辑。
如果需要处理更复杂的重复场景(如多差异项、自定义重复模式),可以调整子片段的匹配规则,比如限定重复片段的结尾标识(如x10 each)来缩小匹配范围。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

