Grunt 替换最后一次出现的匹配字符串

Grunt replace last occurrence of matching string

我有一个自定义要求,我需要用空字符串替换最后一次出现的右大括号,

如何使用 Grunt-replace 实现?

在下面的 Templates.js 文件中,我正在替换

    angular.module('abc.templates', []).run(
with 
return

Templates.js

现在我必须删除下面 line:20 处不必要的右大括号。

 angular.module('abc.templates', []).run(['$templateCache', function($templateCache) {
      $templateCache.put("test",
          //
          //
          //
      $templateCache.put("test",
          //
          //
          //
      $templateCache.put("test",
          //
          //
          //
      $templateCache.put("test",
        //
        //
        //
 line 20:   }]);

在上面的 Templates.js 文件中,我想删除上面提到的第 20 行最后一次出现的右大括号 ')'。

有人可以用任何正则表达式或其他方式帮助我实现这一目标吗?

使用 grunt-replace 您可以尝试以下配置:

Gruntfile.js

module.exports = function (grunt) {

  grunt.initConfig({
    replace: {
      templateJs: {
        options: {
          usePrefix: false,
          patterns: [
            {
              match: /angular\.module\('abc\.templates', \[\]\)\.run\(/g,
              replacement: 'return '
            },
            {
              match: /(angular\.module\('abc\.templates', \[\]\)\.run\([\w\W]+?}])(\))(;)/g,
              replacement: ''
            }
          ]
        },
        files: [
          // Define your paths as necessary...
          {expand: true, flatten: true, src: ['src/template.js'], dest: 'build/'}
        ]
      }
    }
  });

  grunt.loadNpmTasks('grunt-replace');
  grunt.registerTask('default', 'replace:templateJs');
};

附加信息

  1. patterns 数组中使用的第一个 match 正则表达式模式已解释 here。这处理了用 return
  2. 替换 angular.module('abc.templates', []).run( 的第一部分
  3. 解释了 patterns 数组中使用的第二个 match 正则表达式模式 here。这从 }]); 中删除右大括号 )}];
  4. 结束

注意:第二个正则表达式将匹配初始 angular.module('abc.templates', []).run( 部分之后字符 }]); 的第一个实例,并删除 )从中。因此,不幸的是,如果模式 }]); 出现在函数主体的其他地方,这将无法满足您的要求。否则应该没问题。