用 Grunt-Replace 替换 HTML 标签

Replacing a HTML tag with Grunt-Replace

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

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

我正在使用 "grunt-replace":“^0.8.0。”此任务在默认和构建下注册。我试过使用正则表达式来匹配名称,而且我查看文档的时间太长了。这是我的带有替换的 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/'}
        ]
      }
    },

你没有提到你目前得到的结果,所以我假设你看到的脚本标签只是被截断了或者 "undefined" 添加到脚本标签的剩余位。

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

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

此外,您的替换函数需要 return 一个值。显然,如果您要替换为静态字符串,那么您可以使用字符串作为参数。

在 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="" type="FileInclude" url="..js" runat="server"></imod:ScriptPlaceHolder>'
            }
          ]
        },
        files: [
          {expand: true, flatten: true, src: ['<%= config.dist %>/index.html'], dest: 'dist/'}
        ]
      }
    },