使用node.js将文本文件中的正则表达式替换为文件内容

时间:2015-12-28 17:37:15

标签: javascript regex node.js build

此问题适用于任何文本文件,但由于我想将其用于HTML替换,我将使用HTML文件作为示例。我已经看过像gulp注入和替换npm这样的东西,但是没有接缝完成我所需要的。

我想要一些引用另一个文件的占位符文本。当通过此替换功能运行时,placeholdler文本将被文件的内容替换。

main.html中

type 'a with_infinity = Finite of 'a | Infinite

let print_int_with_infinity pp item =
(match item with
    | Infinite -> Format.pp_print_string pp "Infinite"
    | Finite i -> Format.pp_print_int pp i)

(* install printer cannot occur in this context *)
#install_printer print_int_with_infinity

other.js

<script><replace src="./other.js" /></script>

转换后输出文件应为。

console.log("Hello, world!");

我有以下内容,但不知道如何使它在节点中使用文件流。

<script>console.log("Hello, world!")</script>

2 个答案:

答案 0 :(得分:4)

如果您的文件大小合理,则可以避免使用流,并使用string.replace()的自定义替换程序:

var fs = require('fs');

function replace(path) {
    var REGEX = /<replace src="(.+)" \/>/g;
    // load the html file
    var fileContent = fs.readFileSync(path, 'utf8');

    // replacePath is your match[1]
    fileContent = fileContent.replace(REGEX, function replacer(match, replacePath) {
        // load and return the replacement file
        return fs.readFileSync(replacePath, 'utf8');
    });

    // this will overwrite the original html file, change the path for test
    fs.writeFileSync(path, fileContent);
}

replace('./main.html');

使用流

var es = require('event-stream');

function replaceWithStreams(path) {
    var REGEX = /<replace src="(.+)" \/>/g;
    fs.createReadStream(path, 'utf8')
        .pipe(es.split()) // split the input file into lines
        .pipe(es.map(function (line, next) {
            line = line.replace(REGEX, function replacer(match, replacePath) {
                // better to keep a readFileSync here for clarity
                return fs.readFileSync(replacePath, 'utf8'); 
            });
            next(null, line);
        })).pipe(fs.createWriteStream(path)); // change path if needed
}

replaceWithStreams('./main.html');

答案 1 :(得分:0)

您可以尝试:https://gist.github.com/thebergamo/5ee9f589757ee904f882

基本上,您将阅读index.html,找到替换标记,阅读文件中的内容并替换为其他文件中的内容。

此片段可以帮助您处理例外情况= D