NodeJS中如何实现文本文件特定位置可变内容的写入替换
NodeJS 实现两段固定文本间的内容替换
实现思路
- 基于正则表达式的匹配规则,捕获两段固定文本中间的所有内容完成替换
- 对固定文本做正则特殊字符转义,避免固定文本包含
.、*、$等正则保留字符时匹配失效 - 兼容跨多行的中间内容匹配场景
完整实现代码
首先定义正则特殊字符转义工具函数:
function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }
完整的文件读写+替换逻辑:
const fs = require('fs/promises'); /** * 替换两段固定文本中间的内容 * @param {string} startStr 起始固定文本 * @param {string} endStr 结束固定文本 * @param {string} replaceStr 要替换成的新内容 * @param {string} filePath 目标文件路径 */ async function replaceBetween(startStr, endStr, replaceStr, filePath) { try { // 读取原文件内容 const originContent = await fs.readFile(filePath, 'utf8'); const escapedStart = escapeRegExp(startStr); const escapedEnd = escapeRegExp(endStr); // 构造匹配规则,g修饰符代表匹配所有符合条件的片段,去掉则只替换第一个 const matchReg = new RegExp(`(${escapedStart})[\\s\\S]*?(${escapedEnd})`, 'g'); // 执行替换,$1代表匹配到的起始固定文本,$2代表匹配到的结束固定文本 const newContent = originContent.replace(matchReg, `$1\n${replaceStr}\n$2`); // 内容写回文件 await fs.writeFile(filePath, newContent, 'utf8'); } catch (error) { console.error('处理失败:', error); } } // 调用示例 replaceBetween( 'lorem ipsum', 'even more lorem ipsum', 'more lorem ipsum', './你的目标文件.txt' );
注意事项
- 替换模板中的
\n是为了适配换行格式,如果你不需要首尾换行可以直接删除,替换模板改为$1${replaceStr}$2即可 - NodeJS 10及以上版本也可以用
s修饰符让.匹配换行符,正则写法可简化为new RegExp((${escapedStart}).*?(${escapedEnd}), 'gs'),效果一致 - 如果仅需要替换第一组匹配到的内容,去掉正则的
g修饰符即可
内容的提问来源于stack exchange,提问作者Nehan Yaser
相关产品推荐
相关产品推荐

