JS Regex替换文件名中的版本号

时间:2016-11-07 18:29:41

标签: javascript regex gulp

从字符串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');

2 个答案:

答案 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");
	}
});