Javascript String.replace与substring的全局匹配

时间:2013-10-21 02:38:23

标签: javascript regex string replace gruntjs

我正在使用带有grunt-string-replace的Grunt,以便在部署期间将我的开发环境URL的所有实例替换为我的生产环境URL。我将devRootstageRoot保存为变量,我想使用它们来应用替换。

我尝试了两种不同的方法:

  1. 使用RegExp作为模式可以很好地工作,除了我不能在RegExp中使用字符串插值,所以我无法动态地将devRoot添加到模式中。所以我尝试将RegExp直接分配给object属性,或者甚至分配一个返回RegExp的函数,但这根本不起作用。

  2. 由于我的替换相当容易,我退出了第一种方法,并决定使用字符串替换,如下所示:

    'string-replace': {
         rootUrl: {
              options: {
                  replacements: [{
                      pattern: '<%= devRoot %>',
                      replacement: '<%= stageRoot %>'
                  }]
              }
          }
    }
    
  3. 这可以,但只替换我的模式的第一次出现。所以我的问题是:有没有办法用子字符串进行全局不区分大小写的替换?与RegExp gi选项类似。

    或者:如何将插值的RegExp传递给此对象属性

2 个答案:

答案 0 :(得分:1)

如果通过插值表示将变量值连接到正则表达式,那么可以使用RegEx的构造函数语法来实现。即这两个是等价的:

/abc/gi

new RegExp('abc', 'gi');

但是由于第二个接收到一个字符串,你可以将它与一个var连接起来,就像普通字符串一样(毕竟它是一个普通的字符串):

new RegExp('abc' + devRoot, 'gi');

答案 1 :(得分:0)

我不确定它是否有任何帮助但我可以使用Reg Exp Pattern替换该单词的所有实例而不使用该功能。我只使用/&lt;%= devRoot%&gt; / ig,效果很好!