需要使用什么正则表达式在第 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');
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');
我有像
这样的条件语句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');
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');