需要使用什么正则表达式在第 n 次出现的某些字符之间插入内容

What regex needs to be used to insert the contents in between nth occurence of certain charcters

我有像

这样的条件语句
rulesadded='[if value = "##user.Name##" Equal= "Report1"  ][/if]'

rulesadded='[if value = "##user.Name##" Equal= "Report1"  ]
   [if value = "##user.CompanyName##" Equal= "14thNov"]
[/if][/if]'

rulesadded='[if value = "##user.Name##" Equal= "Report1"  ]
      [if value = "##user.CompanyName##" Equal= "14thNov"]
          [if value = "##company.Name##" Equal= "14thNov"]
[/if][/if][/if]'

现在我需要确保我只在第 n 个出现的字符 ][ 之间插入内容。其中 n 表示 if 条件的数量。即上面的语句将变成

 rulesadded='[if value = "##user.Name##" Equal= "Report1"  ]--TEST--[/if]'

rulesadded='[if value = "##user.Name##" Equal= "Report1"  ]
   [if value = "##user.CompanyName##" Equal= "14thNov"]
--TEST--
[/if][/if]'

rulesadded='[if value = "##user.Name##" Equal= "Report1"  ]
      [if value = "##user.CompanyName##" Equal= "14thNov"]
          [if value = "##company.Name##" Equal= "14thNov"]
--TEST--
[/if][/if][/if]';

目前我正在使用以下代码来实现这一点。

 rulesadded=rulesadded.replaceBetween(nth_occurrence(rulesadded, ']', rulesadded.split("[/if]").length-1)+1,nth_occurrence(rulesadded, '[', rulesadded.split("[/if]").length),'--TEST--');

replaceBetween 的方法是:

 String.prototype.replaceBetween = function(start, end, what) {
            return this.substring(0, start) + what + this.substring(end);
        };

但是,如果相等属性中有方括号,这将不起作用。

有没有其他方法可以有效地实现这一目标?

您可以使用这个简单的正则表达式和 replace 函数来替换第一个 [/

var insertContent = function(rule, content){
    if(rule.split('[i').length === rule.split('[/').length)
        return rule.replace(/\[\//, content+'[/');
}

insertContent(yourRule, 'yourContent');

演示:http://jsfiddle.net/h6r8h6se/2/

String.prototype.replaceBetween = function(start, end, what) {
    return this.substring(0, start + 1) + what + this.substring(end);
};
var rulesadded1='[if value = "##user.Name##" Equal= "Report1"  ][/if]';
var rulesadded2='[if value = "##user.Name##" Equal= "Report1"  ][if value =   "##user.CompanyName##" Equal= "14thNov"][/if][/if]';
var rulesadded3='[if value = "##user.Name##"Equal= "Report1"  ][if value = "##user.CompanyName##" Equal= "14thNov"][if value = "##company.Name##" Equal= "14thNov"][/if][/if][/if]';

insertContent(rulesadded1,"--Testing--");
insertContent(rulesadded2,"--Testing--");
insertContent(rulesadded3,"--Testing--");
function insertContent (rule, content){
var regExp = /\[if(.*?)\/if\]/gi;
var split3 = regExp.exec(rule);
var len3 = split3[0].length;
rule = rule.replaceBetween(len3 - 6,len3 - 5,content);
alert(rule);

}

insertContent(yourRule, 'yourContent');

演示:http://jsfiddle.net/xkqsywry/11/