2016-11-07 48 views
1

以字符串css/main.min-1.2.0.css開頭我試圖在每次我們版本時使用Gulp動態地替換HTML中的版本號。JS正則表達式替換文件名中的版本號

下面的正則表達式匹配版本號,但是我需要將版本號與前面的字符串進行匹配以確保我更新正確。

/\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'); 

回答

1

感謝@Guedes在評論中的回答如下,取代整個事情不僅僅是版本。

replace(/css\/main[.]min-(?:\d[.]?)+css$/g, 'css/main.min-' + pkg.version + '.css') 

編輯

下面解決,例如,作爲一飲而盡任務他人使用。

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/')); 
}); 
0

試試這個:

var strings = [ 
 
\t 'css/main.min-1.0.0.css', 
 
\t 'css/main.min-11.22.33.css', 
 
\t '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) { 
 
\t if (matchPattern.test(string)) { 
 
\t \t console.log(string + " -> matched"); 
 
\t \t finalVersion = string.replace(matchPattern, replaceString); 
 
\t \t console.log(finalVersion + " after replace") 
 
\t } 
 
\t else { 
 
\t \t console.log(string + " -> not matched"); 
 
\t } 
 
});

+0

不是遠!謝謝,我忘記提及的主要原因是,這是一個HTML元素,而不僅僅是一個文本字符串! –