如何在 JavaScript 中读取文本文件并把 C 行合并到前一行

作者:袖梨 2026-06-18

本文介绍使用 Node.js 的 fs 模块读取文本文件,通过正则表达式定位独立的 (C) 行,并将其内联追加至其前一行末尾,实现结构化内容重组。适用于自动化生成 TXT 文件后的后处理场景。

本文介绍使用 node.js 的 `fs` 模块读取文本文件,通过正则表达式定位独立的 `(c)` 行,并将其内联追加至其前一行末尾,实现结构化内容重组。适用于自动化生成 txt 文件后的后处理场景。

要实现“删除含 (C) 的独立行,并将其移至前一行末尾”这一需求,核心思路是:将 (C) 所在行与其上一行合并,而非简单替换或全局查找。原始答案中的正则虽能输出预期效果,但逻辑存在隐患(例如匹配任意含 (C) 的行并整体替换为 " (C)",会丢失原行前导内容,且无法保证严格“归属上一行”)。下面提供更鲁棒、语义清晰的解决方案。

✅ 推荐方案:逐行解析 + 合并逻辑

const fs = require('fs');function mergeCWithParent(filePath) {  const content = fs.readFileSync(filePath, 'utf8');  const lines = content.split(/r?n/);  const resultLines = [];  for (let i = 0; i < lines.length; i++) {    const line = lines[i].trim();    // 若当前行为纯 "(C)"(忽略空格),且前一行非空,则合并到前一行    if (line === '(C)' && resultLines.length > 0 && resultLines[resultLines.length - 1].trim() !== '') {      const lastLine = resultLines.pop().trim();      resultLines.push(lastLine + ' (C)');    }     // 其他情况:保留原行(包括空行、含 `(C)` 的非独立行等)    else if (line !== '(C)') {      resultLines.push(lines[i]); // 保持原始换行与空白格式    }  }  return resultLines.join('n');}// 使用示例const updatedContent = mergeCWithParent('./myFile.txt');console.log(updatedContent);// 可选:写回文件// fs.writeFileSync('./myFile.txt', updatedContent);

? 示例输入与输出验证

输入文件 myFile.txt:

Word1(C)Word2Word3

输出结果:

Word1 (C)Word2Word3

✅ 正确处理空行;
✅ 仅合并独立、完整为 (C) 的行
✅ 保留原有缩进与空行结构;
✅ 不误伤如 Wor(C)d1 或 Word6 (C) 等嵌入式 (C)。

⚠️ 注意事项

  • 该方案假设 (C) 总是独占一行(可前后含空白),若业务中存在变体(如 (C) 或 (C)),可将判断改为 line.replace(/s+/g, '') === '(C)';
  • 若需支持 Windows (rn) 和 Unix (n) 混合换行,split(/r?n/) 已兼容;
  • 生产环境建议增加错误处理(如 try/catch 包裹 readFileSync)和文件存在性校验;
  • 如需批量处理多个文件,可封装为异步函数并配合 fs.promises 使用。

此方法逻辑清晰、可维护性强,精准满足“移动至立即父行”的语义要求,是自动化文本后处理的可靠实践。

立即学习“Java免费学习笔记(深入)”;

相关文章

精彩推荐