使用 Node.js 替换文件中的字符串
Replace a String in a File using Node.js
在 Node.js 中替换文件中的字符串:
- 使用
fs.readFile()
方法读取文件。 - 使用该
replace()
方法将字符串替换为替换。 - 使用方法将结果写入文件
fs.writeFile()
。
索引.js
// 👇️ if using ES6 imports uncomment next line // import {readFile, writeFile, writeFileSync, promises as fsPromises} from 'fs'; const {readFile, writeFile, promises: fsPromises} = require('fs'); readFile('./example.txt', 'utf-8', function (err, contents) { if (err) { console.log(err); return; } const replaced = contents.replace(/to be replaced/g, 'replacement string'); writeFile('./example.txt', replaced, 'utf-8', function (err) { console.log(err); }); });
我们使用了
fs.readFile
方法来读取文件的内容。
我们传递给方法的第一个参数是文件的路径,第二个是编码。
如果省略
encoding
参数,函数将返回一个缓冲区,否则返回一个字符串。使用错误对象或null
(如果没有错误)和文件内容调用回调函数。
上面的代码片段假定
example.txt
在同一目录中有一个文件。确保也在同一目录中打开您的终端。例子.txt
to be replaced to be replaced to be replaced
我们使用
String.replace
方法来替换文件中的字符串。
我们传递给该
replace
方法的第一个参数是正则表达式,第二个是替换字符串。正斜杠/ /
标记正则表达式的开始和结束。
该g
标志代表global
并替换匹配字符串的所有匹配项。
如果省略
g
标志,则只会替换文件中第一次出现的字符串。如果要执行不区分大小写的匹配,请i
同时使用该标志。
索引.js
// 👇️ if using ES6 imports uncomment next line // import {readFile, writeFile, writeFileSync, promises as fsPromises} from 'fs'; const {readFile, writeFile, promises: fsPromises} = require('fs'); readFile('./example.txt', 'utf-8', function (err, contents) { if (err) { console.log(err); return; } // 👇️ match string case-insensitively 👇️ const replaced = contents.replace(/to be replaced/gi, 'replacement string'); writeFile('./example.txt', replaced, 'utf-8', function (err) { console.log(err); }); });
该i
标志代表ignore
并在字符串中进行不区分大小写的搜索。
然后
使用fs.writeFile
函数将更新后的字符串写入文件。
上面的例子假设代码放在一个
.js
文件中,并寻找一个example.txt
文件。确保在同一目录中打开终端并运行带有. node index.js
或者,您可以使用承诺。
在 Node.js 中替换文件中的字符串:
- 使用
fsPromises.readFile()
方法读取文件。 - 使用该
replace()
方法将字符串替换为替换。 - 使用方法将结果写入文件
fsPromises.writeFile()
。
索引.js
// 👇️ if using ES6 imports uncomment next line // import {readFile, writeFile, writeFileSync, promises as fsPromises} from 'fs'; const {readFile, writeFile, promises: fsPromises} = require('fs'); async function replaceInFile(filename, replacement) { try { const contents = await fsPromises.readFile(filename, 'utf-8'); const replaced = contents.replace(/to be replaced/gi, replacement); await fsPromises.writeFile(filename, replaced); } catch (err) { console.log(err); } } replaceInFile('./example.txt', 'replacement string 🎊');
这种方法达到相同的结果。但是,此代码示例使用承诺而不是回调。
fsPromises.readFile
()
方法异步读取所提供文件的内容。
如果您没有为
encoding
参数提供值,则该方法返回一个缓冲区,否则返回一个string
。该方法返回一个使用文件内容解析的承诺,因此我们必须await
使用它或使用该.then()
方法来获取已解析的字符串。
fsPromises.writeFile
方法将数据
异步写入文件以替换文件内容(如果文件已存在)。