我正在尝试从text.txt
中删除字符串。 text.txt
文件包含以下格式的字符串
text/more/more.txt
text/home.txt
text/more/yoo/yoo.txt
text/about.txt
现在我正在做的是观看一个文件夹,当上面列出的任何文件(简称text/about.txt
)被删除时,text.txt
文件应自动更新为以下
text/more/more.txt
text/home.txt
text/more/yoo/yoo.txt
为此,我使用hound
模块继续观察删除事件。并replace
模块从text.txt
文件中替换已删除的路径。以下是我的代码
watcher.on('delete', function(file, stats) {
replace({
regex: /file/g, // file is something like this text/about.txt
replacement: '',
paths: [path + '/text.txt'],
recursive: true,
silent: true,
});
});
但我的上述代码不会从file
文件中删除特定字符串,即text.txt
。 我该如何解决这个问题?
更新
上面代码中的 file
具有此值text/about.txt
。
答案 0 :(得分:1)
我已更新变量 search_content 和 replace_content 以处理特殊字符,然后使用 fs 模块替换文件中的所有字符串。您还可以在文件上运行同步循环以使用回调替换字符串。
// Require fs module here.
var search_content = "file";
var replace_content = '';
var source_file_path = '<<source file path where string needs to be replaced>>';
search_content = search_content.replace(/([.?&;*+^$[\]\\(){}|-])/g, "\\$1");//improve
search_content = new RegExp(search_content, "g");
fs.readFile(source_file_path, 'utf8', function (rfErr, rfData) {
if (rfErr) {
// show error
}
var fileData = rfData.toString();
fileData = fileData.replace(search_content, replace_content);
fs.writeFile(source_file_path, fileData, 'utf8', function (wfErr) {
if (wfErr) {
// show error
}
// callback goes from here
});
});
答案 1 :(得分:1)
这是语义上的错误,你误解了执行此操作时会发生什么:
watcher.on('delete', function(file, stats) {
...
regex: /file/g, // file is something like this text/about.txt
...
}
这里,RegExp对象中的file
正在查找名为file
的字符串,而不是您传递给函数的String对象的实际变量内容。这样做:
regex: new RegExp(file, 'g'), // file is something like this text/about.txt
有关详细信息,请参阅RegExp。