我正在执行查找并用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进行此操作?
答案 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')));
});