正则表达式找到并替换gulp / node并在替换中使用find的部分字符串?

时间:2016-07-29 17:11:07

标签: javascript node.js gulp

我正在执行查找并用gulp替换。

我需要在下面找到这个字符串(ANYTHING可以是任何东西,它不是一串' ANYTHING'):

{% id_ANYTHING %}

并将其替换为:

{% block ANYTHING %}{% endblock %}

示例1。

替换它:

{% id_page %}

有了这个:

{% block page %}{% endblock %}

示例2。

替换它:

{% id_whatever %}

有了这个:

{% block whatever %}{% endblock %}

我找到了我需要找到匹配的正则表达式。我已经使用gulp-replace进行类似但更简单的任务,所以我开始使用它,但我不知道如何抓住任何东西'值,以便我可以在替换中使用它。

https://github.com/lazd/gulp-replace

replace = function() {
  return gulp.src('before.html')
    .pipe(replace({
      patterns:
        [{
          match: /{% id_.{2,99} %}/g,
          replacement: '{% block page %}{% endblock %}'
        }]
    }))
    .pipe(gulp.dest('after.html'));
},

我是否应该使用Gulp或Node进行此操作?

1 个答案:

答案 0 :(得分:0)

根据gulp-replace的文档,您可以使用函数替换值,就像String.prototype.replace()

一样

此外,我已修改您的RegEx,使用.{2,99}()组合在一起。 String.replace()回调函数会将每个组拆分为单独的arg。由于您只对提取该组感兴趣,因此我们可以String.replace()执行所有工作并返回值以替换匹配的文本。

const gulp = require('gulp')
const replace = require('gulp-replace');
const path = require('path');
let pattern = new RegExp(/{% id_(.{2,99}) %}/, 'g');

gulp.task('replace', () => {
  return gulp.src('before.html')
    .pipe(replace(pattern, (match, p1) => {
      return `{% block ${p1} %} {% endblock %}`;
    }))
    .pipe(gulp.dest(path.join(__dirname, 'after.html')));
});