用Grunt-Replace替换HTML标记

时间:2015-03-12 14:23:16

标签: javascript regex gruntjs build-process

我正在处理一个工作的grunt文件。我们在本地工作,我们的文件是html,当我们将它们实现到我们的CMS时,他们需要转换为aspx。

我正在尝试将<script scr=""></script>的所有实例替换为<imod:ScriptPlaceHolder id="#nameOfFile" runat="server" type="FileInclude" url="#pathToFile"></imod:ScriptPlaceHolder>

我正在使用“grunt-replace”:“^ 0.8.0。”此任务在default和build下注册。我尝试使用正则表达式来匹配名称,我一直在查看文档太久了。这是我的替换版本的grunt文件:

replace: {
      dist: {
        options: {
          patterns: [
            {
              match: '/script src="/g',
              replacement: function() {
                'asp:PlaceHolder runat="server" url="';
              }
            }
          ]
        },
        files: [
          {expand: true, flatten: true, src: ['<%= config.dist %>/index.html'], dest: 'dist/'}
        ]
      }
    },

2 个答案:

答案 0 :(得分:0)

你没有提到你当前得到的结果所以我假设你看到脚本标签被简单地截断或者“未定义”前置于脚本标记的剩余部分。

我发现http://www.regexr.com/对测试正则表达式非常有用。

尝试将您的匹配更改为 - '/<script\ssrc=".+</script>/g'

另外,您的替换函数需要返回一个值。很明显,如果你要用静态字符串替换,那么你可以使用字符串作为参数。

答案 1 :(得分:0)

在Matthew Kime的帮助下,我得以实现这一目标。在我的正则表达式中,我不得不搜索2个句点,因为我正在使用grunt-rev来版本化我的文件。我还使用文件名剥离了它的扩展名来动态命名文件。

以下是我能够得出的结论。

// replace script tags to imod placeholders
    replace: {
      dist: {
        options: {
          patterns: [
            {
              match: /<script src=\"(.*\/)(.+?)\.(.+?)\.js\"><\/script>/g,
              replacement: '<imod:ScriptPlaceHolder id="$2$3" type="FileInclude" url="$1$2.$3.js" runat="server"></imod:ScriptPlaceHolder>'
            }
          ]
        },
        files: [
          {expand: true, flatten: true, src: ['<%= config.dist %>/index.html'], dest: 'dist/'}
        ]
      }
    },