从字符串css/main.min-1.2.0.css
开始我尝试使用Gulp动态替换HTML中的版本号。
以下正则表达式与版本号匹配,但是我需要将版本号与前面的字符串匹配以确保我更新正确。
/\b\d+(?:\.\d+)*\b/
正则表达式应理想地匹配此起始字符串和文件扩展名,并替换版本号1.0.0
。
css/main.min-1.0.0.css
修改
接下来,我挣扎着为什么以下失败似乎与双引号有关!
var string = '<link rel="stylesheet" href="https://example.com/css/main.min-1.0.0.css">';
string.replace(/css\/main[.]min-(?:\d[.]?)+css$/g, 'css/main.min-1.1.1.css');
答案 0 :(得分:1)
感谢评论中的@Guedes,答案现在如下,取代整个版本而不仅仅是版本控制。
replace(/css\/main[.]min-(?:\d[.]?)+css$/g, 'css/main.min-' + pkg.version + '.css')
修改强>
以下解决,示例作为其他任何人使用的gulp任务。
gulp.task('versioned-paths', function(){
gulp.src(['public/**/*.html', 'public/**/*.php'])
.pipe(replace(/css\/main\.min-(?:\d\.\d\.\d)\.css/g, 'css/main.min-' + pkg.version + '.css'))
.pipe(replace(/js\/env\.min-(?:\d\.\d\.\d)\.js/g, 'js/env.min-' + pkg.version + '.js'))
.pipe(replace(/js\/main\.min-(?:\d\.\d\.\d)\.js/g, 'js/main.min-' + pkg.version + '.js'))
.pipe(gulp.dest('public/'));
});
答案 1 :(得分:0)
试试这个:
var strings = [
'css/main.min-1.0.0.css',
'css/main.min-11.22.33.css',
'css/main1.min-1.0.0.css'
];
var matchPattern = /^css\/main\.min-\d+\.\d+\.\d+\.css$/;
var replaceString = 'css\/main\.min-2.3.4.css';
strings.forEach(function (string) {
if (matchPattern.test(string)) {
console.log(string + " -> matched");
finalVersion = string.replace(matchPattern, replaceString);
console.log(finalVersion + " after replace")
}
else {
console.log(string + " -> not matched");
}
});