为什么JavaStcript str.replace()不能处理长HTML字符串?

时间:2016-01-18 08:50:47

标签: javascript node.js string

我有很长的HTML文件,我使用

转换为字符串

var str = fs.readFile(path, 'utf8', callBabk);

我想用其他东西替换部分字符串:

str = str.replace('toReplace', 'replaceWithThis');

但这不起作用。

有什么想法吗?

编辑:

完整的代码是:

exports.fileToString = function(path){
    return new Promise(function(resolve, reject){
        fs.readFile(path, 'utf8', function(err, data) {
            if (err) {
                return reject(err);
            }
            return resolve(data);
        });
    });
};

然后在另一个文件中:

var htmlString = '';
Promise.all([
 htmlString = fileUtils.fileToString('../file.html'),
]).then(function() {
 htmlString = htmlString.replace('toReplace', 'replaceWithThis');
 console.log('htmlString: ' + htmlString); //This never prints
}. reject);

2 个答案:

答案 0 :(得分:1)

fs.readFile()不会返回它读取的数据,因此代码为:

var str = fs.readFile(path, 'utf8', callBabk);

完全错了。 fs.readFile()是一个异步函数,结果仅在您传递的回调中可用。

fs.readFile(path, 'utf8', function(err, data) {
    var str;
    if (!err) {
        str = data.replace(/toReplace/g, 'replaceWithThis');
        // now do something with the modified string
    }
});

P.S。如果要替换给定字符串的所有匹配项(不仅仅是第一个匹配项),您还需要在正则表达式上使用g标志。

答案 1 :(得分:0)

// read the file
fs.readFile('./myfile.html', function read(err, data) {
    if (err) {
        throw err;
    }
processContent(data)
});
//replace the strings
function processFile(content) {
    var str = content.replace(/toReplace/g, 'replaceWithThis');
    console.log(str);
}