如何使用 Gulp 正则表达式搜索匹配组文件的内容?

How to use Gulp to regex search with match groups the contents of a file?

我正在尝试创建 Gulp 版本 4 任务

我看过gulp-text-simple and gulp-scan (which is no longer maintained and uses depreciated gulp-util)

我找不到任何示例来说明如何做我正在寻找的事情。

这里有两种方法(我推荐第二种,但这取决于你将如何处理结果,比如你想 运行 gulp Trues 上的插件 and/or 错误)。


方法一:

const gulp = require("gulp");
const gulpif = require("gulp-if");
const path = require("path");
const noop = require("gulp-noop");

const regex = /Public ReadOnly isHealthy As Boolean = (True|False)/;

// console.log("Public ReadOnly isHealthy As Boolean = True".match(regex));  // s/b true
// console.log("Public ReadOnly isHealthy As Boolean = False".match(regex)); // s/b false

const condition = function (file) {

  // here file is a vinyl file
  const match = file.contents.toString().match(regex);      
  console.log(`${path.basename(file.path)}: ` + match[1]);

  return match[1] === "True";
}

const ifRegEx = function() {

  return gulp.src('./src/*.txt')

    .pipe(gulpif(condition, noop(), noop()));
    // .pipe(gulpif(condition, gulp.dest('./truePile'), gulp.dest('./falsePile')));
};

exports.ifRegEx = ifRegEx;

使用 gulpif,您可以以不同于 False 的方式处理 True - 在注释代码中,它们被复制到不同的文件夹。


方法二:

const glob = require("glob");
const files = glob.sync('./src/*.txt');  // returns an array
const fs = require("fs");

const findRegEx = function (done) {

  const regex = /Public ReadOnly isHealthy As Boolean = (True|False)/;

  files.forEach( file => {
    let contents = fs.readFileSync(file, "UTF8");
    const match = contents.match(regex);
    console.log(`${file}: ` + match[1]);

    // if match[1] === "True" doThis;
    // else doThat;
  });
  done();
}

exports.findRegEx = findRegEx;

这将打印出文件名和 True/False 如:

./src/testFalse.txt: False
./src/testTrue.txt: True
./src/testTrue2.txt: True