2016-07-29 120 views
-1

我正在执行一个查找并用gulp替换。正则表达式查找并用gulp/node替换,并使用部分查找字符串替换?

我需要找到这个字符串以下(什么都可以是任何东西,它不是 '里' 的字符串):

{% id_ANYTHING %} 

而与此替换它:

{% block ANYTHING %}{% endblock %} 

例1。

替换此:

{% id_page %} 

有了这个:

{% block page %}{% endblock %} 

例题。

替换此:

{% 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')); 
}, 

我应该寻求与咕嘟咕嘟或节点做到这一点?

回答

0

每对gulp-replace你可以使用一个功能重置价值的文档,就像你可以String.prototype.replace()

而且,我已经修改了你的正则表达式组.{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'))); 
}); 
+0

应该这样:let pattern = new RegExp(/ {%id _(。{2,99})%} /,'g'); 实际上是这样吗?:let pattern = new RegExp('{%id _(。{2,99})%}','g'); https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions – Evans

+0

@Evans它们可以互换。如果在表达式周围使用'''',而不需要表达式周围的''''。尽管将它传递给RegExp时,您可以使用'//'作为实际文字。 [见这里](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Description)。但要注意的是,如果在表达式周围使用'''',则需要遵循字符串的转义规则,而使用'//'的文字表示法则不需要担心。 – peteb