Предполагая, что вы всегда сохраняете текст в начальных и конечных комментариях одинаковым, это работает:
var gulp = require('gulp');
var replaceString = require('gulp-string-replace');
let replacement = 'Hello world!';
let pattern = /(<!-- js starts -->)[^!]+(<!-- js ends -->)/gim;
gulp.src('index.html')
.pipe(replaceString(pattern,function(n0,n1,n2){
return n1 + '\n' + replacement + '\n' + n2;
}))
.pipe(gulp.dest('output'));
Результат output/index.html
:
<!-- js starts -->
Hello world!
<!-- js ends -->
Кстати,вы сказали, что пытаетесь использовать Regex, но похоже, что вы передаете строковый литерал, а не литерал Regex (то, что я использую выше) или результат вызова конструктора RegExp, например var pattern = new RegExp('hello\s{0,1}World');
Хотя я не буду давать советы о том, что вы должны и не должны использовать, я укажу, что gulp-string-replace
некоторое время не обновлялся и имеет открытый выпуск , который на самом делеповлиял на мой ответ;Я попытался использовать встроенные обратные ссылки (например, $1\nHello World\n$2
), и это не сработало, заставив меня использовать аргумент функции обратного вызова.gulp-string-replace
просто использует replacestream для фактической операции замены.