我想用grunt-string-replace替换字符串。不幸的是,即使在regex101中完美匹配,我的RexEx也无法正常工作?
此模式应匹配所有CSS链接:
<link href=\"css\/[a-zA-Z\-]+\.css\"[a-zA-Z=\"\/ ]+>
<link href="css/normalize.css" >
<link href="css/normalize.css" rel="stylesheet" type="text/css">
<link href="css/components.css" rel="stylesheet" type="text/css">
<link href="css/style-sheet.css" rel="stylesheet" type="text/css">
https://regex101.com/r/aY9hY0/21
这是我的Gruntfile.js中的替换部分(在没有正则表达式的情况下使用它时可以正常工作):
'string-replace': {
dist: {
files: [{
expand: true,
cwd: '../src',
src: '**/*.html',
dest: '../process/html'
}],
options: {
saveUnchanged: true,
replacements: [{
pattern: '<link href=\"css\/[a-zA-Z\-]+\.css\"[a-zA-Z=\"\/ ]+>',
replacement: 'asdf'
}]
}
}
},
也许Grunt有一个特殊的开始/结束/转义模式?
答案 0 :(得分:2)
我在网上搜索&#34; grunt string-replace&#34;,根据您显示的文件部分。这导致我the grunt-string-replace NPM page,其中包含一个例子:
options: {
replacements: [{
pattern: /\/(asdf|qwer)\//ig,
replacement: '"$1"'
}, {
pattern: ',',
replacement: ';'
}]
}
请注意,这不是JSON,它是一个实际的JavaScript文件(Gruntfile.js
,而不是Gruntfile.json
),所以正则表达式不是包含要匹配的模式的字符串,而是JavaScript正则表达式文字。 MDN是学习JS的绝佳资源,the MDN page about regular expressions详细解释了这个文字语法。
简而言之,需要将其括在/whatever/
中,而不是 'whatever'
。