Grunt RegEx语法

时间:2017-08-31 17:18:54

标签: regex gruntjs

我想用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有一个特殊的开始/结束/转义模式?

1 个答案:

答案 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'