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

Javascript 在某些字符出现n次之间插入内容需要使用什么正则表达式,javascript,regex,Javascript,Regex,我有条件语句,比如 rulesadded='[if value = "##user.Name##" Equal= "Report1" ][/if]' 或 或 现在我需要确保我只在第n次出现的字符之间插入内容][。其中n表示if条件的数量。即,上述语句将变为 rulesadded='[if value = "##user.Name##" Equal= "Report1" ]--TEST--[/if]' 或 或 目前我正在使用以下代码来实现这一点 rulesadded=rulesadde

我有条件语句,比如

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

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

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

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

 rulesadded=rulesadded.replaceBetween(nth_occurrence(rulesadded, ']', rulesadded.split("[/if]").length-1)+1,nth_occurrence(rulesadded, '[', rulesadded.split("[/if]").length),'--TEST--');
替换的方法是:

 String.prototype.replaceBetween = function(start, end, what) {
            return this.substring(0, start) + what + this.substring(end);
        };
但是,如果equal属性中有方括号,这将不起作用


有没有其他有效的方法来实现这一点???

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

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

insertContent(yourRule, 'yourContent');
演示:

}


演示:

我已经更新了,它是未定义的,因为JSFIDLE中的规则2有2个[if],但只有1个[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--');
 String.prototype.replaceBetween = function(start, end, what) {
            return this.substring(0, start) + what + this.substring(end);
        };
var insertContent = function(rule, content){
    if(rule.split('[i').length === rule.split('[/').length)
        return rule.replace(/\[\//, content+'[/');
}

insertContent(yourRule, 'yourContent');
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');