为什么不是't此函数用于修改最终输出
Why isn't this function modifying the final output?
我正在做一些简单的事情:读取一个文件,替换一个字符,并输出修改后的内容:
#!/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
不会影响最终输出。我的开场白不是卷曲的,而是直白的。
我做错了什么?
(如果a将内容从replaceCharacters
移动到fs.readFile
,则引号会替换)。
编辑:
函数console.log(data)
内部的值确实发生了变化,用大引号输出数据。
它正在替换它们,但从来没有返回它所替换的东西:
function replaceCharacters(data) {
data = data
.replace(/"(?='b|'*|')/g, '“')
console.log(data)
return data; // <====
}
然后当你使用它时:
data = replaceCharacters(data)
// ^^^^^^^
正如您所知,replace
创建了一个带有替换项的新字符串,它不会在适当的位置更新该字符串。(不能,JavaScript中的字符串是不可变的。)在replaceCharacters
函数中,使用结果更新data
参数,但这不会更改调用replaceCharacters
时使用的变量,只是函数调用中的参数。因此,正如您必须在您的replaceCharacters
函数中写入data = data.replace(...)
一样,您也必须从的replaceCharacters
函数返回结果并使用该返回值。
相关文章:
- 将函数的上下文应用于javascript变量
- keyup事件处理程序更改焦点不适用于快速键入
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- 为什么不是't此函数用于修改最终输出
- 用于修改文档元素的 PHP 代码
- regex,用于修改单词末尾特定大小写的字符
- 动态修改CSS-适用于IE9,但不适用于Chrome和Firefox
- 快速实现用于修改 JPEG 解码器的 8 点 1D DCT
- Chrome扩展,用于修改Twitter的innerHTML
- Chrome扩展,用于修改页面内容
- 用于 DOM 修改的高效 Javascript
- Chrome 扩展程序,用于修改无法加载的图片
- 用于日期字符串修改的 Javascript 正则表达式
- 利用浏览器缓存 |修改 .htaccess 文件 |- 不适用于JavaScript文件
- 用于修改嵌入的角度指令
- 用于修改从子视图模型在父视图上可观察到的删除的模式
- 如何让两个不同的输入(一个用于移动设备,一个用于桌面)修改同一变量
- Jquery用于修改页面上的所有锚标记href,并从href属性中提取关键请求参数
- 如何将字符串拆分为数组,修改数组然后应用于javascript中的字符串
- Array.prototype.reduce与用于过滤和修改数据的简单for循环相比