以下是我的元素id
,我想动态更新它。
invoice[46][ap_details][4][ap_header_id]
我想只更新第二个号码,即[4]
,如下所示:
invoice[46][ap_details][5][ap_header_id]
我正在使用下面的代码来更新这两个值。
var strNewName = $(this).attr('name').replace(/\[\d+\]/g, function(strName) {
strName = strName.replace(/[\[\]']+/g, '');
var intNumber = parseInt(strName) + 1;
return '[' + intNumber + ']';
});
任何帮助都将不胜感激。
答案 0 :(得分:1)
使用此正则表达式 ./manage.py dbshell
,您可以构造字符串并更改整数。
/((\w)+)(\[\d+\])(\[(\w)+\])(\[\d+\])(\[(\w)+\])/gi
的小提琴
答案 1 :(得分:1)
var strName = "invoice[46][ap_details][4][ap_header_id]";
var parts = strName.split('[');
parts[3] = parts[3].replace(/^\d+/, n => +n + 1);
var strNewName = parts.join('[');
console.log(strNewName);

如果您不想使用箭头功能,请替换此行:
parts[3] = parts[3].replace(/^\d+/, n => +n + 1);
用这个:
parts[3] = parts[3].replace(/^\d+/, function(n) { return +n + 1; });
<强>解释强>
split
将返回如下数组:
[
"invoice",
"46]", // parts[1] to change this
"ap_details]",
"4]", // parts[3] to change this (and so on, you do the math)
"ap_header_id]"
]
/^\d+/
将匹配开头的任何数字(不需要g
修饰符)。
替换为+n + 1
而不是n + 1
,因为n
是一个字符串,您必须强制解释器将其用作数字,否则此"4" + 1
将导致此"41"
。
然后,在更改所需内容后,使用join
加入部件,使用与分割([
)相同的字符。
答案 2 :(得分:1)
也许不要使用正则表达式来构建你的元素id。你也可以这样做:
var id = 5
var name = "invoice[46][ap_details][";
name += id;
name += "][ap_header_id]";
var toReplace = "invoice[46][ap_details][~~id~~][ap_header_id]"
var replaced = toReplace.replace(/~~id~~/g, id);
console.log(name);
console.log(replaced);