Как использовать Gulp для регулярного поиска в группах совпадений содержимого файла? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь создать задачу Gulp версии 4, которая

  • Считывает содержимое данного файла
  • Использует регулярное выражение для поиска строки: Public ReadOnly isHealthy As Boolean = (True|False)
  • Возвращает значение, соответствующее первой группе совпадений, True или False.

Я смотрел на gulp-text-simple и gulp-scan (который больше не поддерживается и использует устаревший gulp-util )

Я не смог найти примеров, показывающих, как делать то, что я ищу.

1 Ответ

1 голос
/ 16 октября 2019

Вот два подхода (я рекомендую второй, но это зависит от того, что вы будете делать с результатами, например, хотите ли вы запустить плагин gulp для Trues и / или False).


Подход 1:

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 вы можете обрабатывать True иначе, чем False - в закомментированном коде они копируются в разные папки.


Подход 2:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...