grunt-text-replace 和正則的一些小記
阿新 • • 發佈:2019-02-07
1、grunt-text-replace
使用grunt來壓縮前端檔案的時候,經常涉及到index檔案種的內容替換,grunt-text-replace是實現這種功能的一個外掛。npm網站上對grunt-text-replace的用法有多種介紹,一般有下面兩種:
1、第一種
replace: {
example: {
src: ['text/*.txt'], // source files array (supports minimatch)
dest: 'build/text/', // destination directory or file
replacements: [{
from: 'Red', // string replacement
to: 'Blue'
}, {
from: /(f|F)(o{2,100})/g, // regex replacement ('Fooo' to 'Mooo')
to: 'M$2'
}, {
from: 'Foo',
to: function (matchedWord) { // callback replacement
return matchedWord + ' Bar' ;
}
}]
}
}
2、第二種
replace: {
another_example: {
src: ['build/*.html'],
overwrite: true, // overwrite matched source files
replacements: [{
from: /[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2,4}/g,
to: "<%= grunt.template.today('dd/mm/yyyy') %>"
}]
}
}
第一種有dest目標檔案,一般都是將原始檔進行替換後,再壓縮到目標檔案。
而第二種方法是重寫原始檔,即原始檔保留,把裡面的內容進行替換。以第二種方法為例進行介紹,
(1)src
(2)
overwrite
為true時表示會重寫原始檔;(3)
from
為一個正則表示式,用來匹配查詢要替換的內容;(4)
to
為用來替換的內容,它可以直接是一個字串,也可以是一個function,當然function最後還是要返回一個字串,用來替換原始檔的內容。
例如下面這段程式碼:
numberRe: {
src: ['../index.phtml'],
overwrite: true,
replacements: [{
from: /(version:")([0-9.]+)(")[\S\s]*(isDebug: true)/g,
to: function(matchedWord, index, fullText, regexMatches){
var regN = /[0-9]+$/;
var versionNum = parseInt(regexMatches[1].match(regN), 10) + 1;
var addVer = regexMatches[1].replace(regN, versionNum);
return matchedWord.replace(/(version:")([0-9.]+)(")[\S\s]*(isDebug: true)/, "$1"+addVer+"$3"+",\nisDebug: false");
}
}]
}
關鍵字to
的值就是一個function,注意這個function是可以傳參的,它有四個引數,分別為: (1)matchedWord 根據form正則表示式匹配出來的the matched world(完全匹配的內容)
(2)index 是一個下標,指向匹配內容第一次出現的地方
(3)fullText 所有的原始檔內容
(4)regexMatches 是一個數組,裡面是正則表示式匹配出的內容,注意這些內容是正則表示式種用()
包含起來的大原子所匹配出來的內容。 例如官方文件種給出的例子:
// Where the original source file text is: "Hello world"
replacements: [{
from: /wor(ld)/g,
to: function (matchedWord, index, fullText, regexMatches) {
// matchedWord: "world"
// index: 6
// fullText: "Hello world"
// regexMatches: ["ld"]
return 'planet'; //
}
}]
// The new text will now be: "Hello planet"
2、正則小記
/(version:")([0-9.]+)(")[\S\s]*(isDebug: true)/g
()
將正則表示式的原子分成組,變成一個個大原子。當字串用正則表示式進行匹配時,這些原子匹配成功後都會成為匹配結果中的一個元素。
例如下面這段程式碼:
export function regText(){
var str = "hello!";
var reg = /(h)[\w]*(l)(\w)(!)/;
var res = str.match(reg);
console.log(res);
}
它的輸出就是下面這樣:
["hello!", "h", "l", "o", "!", index: 0, input: "hello!"]
0:"hello!"
1:"h"
2:"l"
3:"o"
4:"!"
index:0
input:"hello!"
length:5
具體需要如何操作,就可以根據情況去選擇元素了。