我正在使用gulp促进前端部署。我想替换index.html中的一些字符串 例如,将以下代码变成
<!-- js starts -->
<script src="xxxxxx/xxxx/xxx1.js"></script>
<script src="xxxxxx/xxxx/xxx2.js"></script>
<script src="xxxxxx/xxxx/xxx3.js"></script>
<script src="xxxxxx/xxxx/xxx4.js"></script>
<!-- js ends -->
进入
<!-- js starts -->
<script src="xxxxxx/xxxx/all-one.js"></script>
<!-- js ends -->
我已经安装了gulp-string-replace,并且可以通过一些简单的正则表达式正常工作。但是我的情况似乎包含一些特殊字符,例如<! ->
这是我的gulp代码,但没有实现我想要的代码。 gulp.src('index.html')。pipe(replaceString(“(?<='')(。*)(?='')”,“我想要什么”)).pipe(gulp.dest(target ));
答案 0 :(得分:0)
假设您始终将开头和结尾注释中的文本保持不变,那么可以这样做:
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构造函数的结果,例如{ {1}}
尽管我不会就您应该使用和不应该使用的内容提供建议,但我会指出var pattern = new RegExp('hello\s{0,1}World');
已有一段时间没有更新,并且an open issue实际上影响了我的答案;我尝试使用内联反向引用(例如gulp-string-replace
),但它不起作用,迫使我使用回调函数参数。 $1\nHello World\n$2
仅将replacestream用于实际的替换操作。