我正在做一些简单的事情:读取文件,替换字符,然后输出修改后的内容:
#!/usr/bin/env node
var fs = require('fs')
, filename = process.argv[2]
if (process.argv.length < 3) {
console.log('Usage: node ' + process.argv[1] + ' FILENAME')
process.exit(1)
}
function replaceCharacters(data) {
data = data
.replace(/"(?=\b|\*|')/g, '“')
console.log(data)
}
function saveHtml(data) {
fs.writeFile("untitled.html", data, function(err) {
if (err)
console.log(err)
else
console.log(data)
})
}
fs.readFile(filename, 'utf8', function(err, data) {
if (err) throw err
replaceCharacters(data)
saveHtml(data)
})
问题是,replaceCharacters
不影响最终输出。而不是卷曲的开头报价,我仍然得到直的。
我做错了什么?
(如果将内容从replaceCharacters
移至fs.readFile
,则引号会替换。)
修改
值在函数console.log(data)
内发生变化,输出带有引号的数据。
答案 0 :(得分:5)
它取代了它们,但从未返回它取代的内容:
function replaceCharacters(data) {
data = data
.replace(/"(?=\b|\*|')/g, '“')
console.log(data)
return data; // <====
}
然后当你使用它时:
data = replaceCharacters(data)
// ^^^^^^^
您似乎知道,replace
会在替换时创建一个 new 字符串,但它不会更新字符串。 (不可能,JavaScript中的字符串是不可变的。)在replaceCharacters
函数中,您要使用结果更新data
参数,但这并不会更改调用replaceCharacters
的变量,只是函数调用中的参数。因此,您必须在 data = data.replace(...)
函数中编写replaceCharacters
,您必须从您的replaceCharacters
函数返回结果,使用该返回值。