我如何用其他东西替换<!-comment->之间的字符串

时间:2019-06-22 06:46:22

标签: javascript regex gulp

我正在使用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 ));

1 个答案:

答案 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用于实际的替换操作。