6

我需要读取一个文件并用动态内容替换该文件中的一些文本。当我尝试 string.replace 时,它​​不适用于我从文件中读取的数据。但是对于它正在工作的字符串。我正在使用节点。 js和快递。

fs.readFile('test.html', function read(err, data) {
    if (err) {
                console.log(err);
    }
    else {
        var msg = data.toString();
        msg.replace("%name%", "myname");
        msg.replace(/%email%/gi, 'example@gmail.com');

        temp = "Hello %NAME%, would you like some %DRINK%?";
        temp = temp.replace(/%NAME%/gi,"Myname");
        temp = temp.replace("%DRINK%","tea");
        console.log("temp: "+temp);
        console.log("msg: "+msg);
    }
});

输出:

temp: Hello Myname, would you like some tea?
msg: Hello %NAME%, would you like some %DRINK%?
4

3 回答 3

13
msg = msg.replace(/%name%/gi, "myname");

您将字符串而不是正则表达式传递给第一个替换,它不匹配,因为大小写不同。即使它确实匹配,您也不会将此修改后的值重新分配给msg. 这很奇怪,因为您为tmp.

于 2012-11-20T06:54:59.453 回答
4

您需要分配.replace()返回字符串的变量。在你的情况下,你需要这样做,msg = msg.replace("%name%", "myname");

代码:

fs.readFile('test.html', function read(err, data) {
    if (err) {
                console.log(err);
    }
    else {
        var msg = data.toString();
        msg = msg.replace("%name%", "myname"); 
        msg = msg.replace(/%email%/gi, 'example@gmail.com');

        temp = "Hello %NAME%, would you like some %DRINK%?";
        temp = temp.replace(/%NAME%/gi,"Myname");
        temp = temp.replace("%DRINK%","tea");
        console.log("temp: "+temp);
        console.log("msg: "+msg);
    }
});
于 2012-11-20T06:55:43.557 回答
2

replace()返回带有替换子字符串的新字符串,因此您必须将其分配给变量才能访问它。它不会改变原始字符串。

您可能希望将转换后的字符串写回您的文件。

于 2012-11-20T06:53:47.560 回答