在表单中,我有一个动态表,可以在其中添加或删除每个单元格中带有字段的行。每次我添加/删除一行时,它都会更新每个name
的{{1}}。
名称如下:<input />
我只想更改此字符串的sheet[discounts][0][base]
(不是完全匹配,而是方括号中的数字)。
我找到了正确的正则表达式来做到这一点:
[0]
但是我也有更复杂的输入名称,例如:var name = $(input).attr('name');
var str = name.replace(/\[\d+\]/, '[' + index + ']');
我只想更改方括号中数字的最后一次出现:
sheet[cci][0][terms][0][commit]
答案 0 :(得分:1)
使用贪婪的点来消耗(并匹配)直到最后一个[0]
为止的所有内容:
var name = 'sheet[cci][0][terms][0][commit]';
var index = 3;
var str = name.replace(/(.*)\[\d+\]/, '$1[' + index + ']');
console.log(str);
这里的替换逻辑是将[index]
替换放置在包含输入的第t部分的第一个捕获组之后。
答案 1 :(得分:0)
在字符串末尾前对[\d+]
进行负向查找:
const index = 7;
`sheet[cci][0][terms][1][commit]
sheet[cci][0][terms][2][commit]
sheet[cci][0][terms][3][commit]`.split('\n').forEach((str) => {
console.log(
str.replace(/\[\d+\](?!.*\[\d+\])/, '[' + index + ']')
)
});
如果方括号中不是纯数字的项(例如示例文本中的cci
,terms
和commit
)始终包含< em> no 数字,您可以将其简化为\D*$
的前瞻(对于非数字字符的前瞻,后跟字符串的结尾):
const index = 7;
`sheet[cci][0][terms][1][commit]
sheet[cci][0][terms][2][commit]
sheet[cci][0][terms][3][commit]`.split('\n').forEach((str) => {
console.log(
str.replace(/\[\d+\](?=\D*$)/, '[' + index + ']')
)
});