匹配方括号中最后一次出现的数字的 JS 正则表达式
JS regex that matches the last occurrence of a number in square brackets
在一个表单中,我有一个动态的 table,我可以在其中添加或删除每个单元格中包含字段的行。每次我 add/delete 一行,它都会更新每个 <input />
的 name
。
名字是这样的:sheet[discounts][0][base]
我只想更改此字符串的 [0]
(不是完全匹配,而是方括号中的数字)。
我找到了正确的正则表达式:
var name = $(input).attr('name');
var str = name.replace(/\[\d+\]/, '[' + index + ']');
但我也有更复杂的输入名称,例如:sheet[cci][0][terms][0][commit]
我只想更改 方括号中数字的最后一次出现 :
// replace this
sheet[cci][0][terms][0][commit]
// by this
sheet[cci][0][terms][1][commit]
字符串结尾前 [\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
text) 总是包含 no 数字,你可以将它简化为 lookahead for \D*$
(lookahead for non-digit characters, followed by the end of the string):
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 + ']')
)
});
使用一个贪婪的点来消耗(并匹配)所有东西直到最后一个 [0]
:
var name = 'sheet[cci][0][terms][0][commit]';
var index = 3;
var str = name.replace(/(.*)\[\d+\]/, '[' + index + ']');
console.log(str);
此处的替换逻辑是将 [index]
替换放在包含第 t 个输入第一部分的第一个捕获组之后。
在一个表单中,我有一个动态的 table,我可以在其中添加或删除每个单元格中包含字段的行。每次我 add/delete 一行,它都会更新每个 <input />
的 name
。
名字是这样的:sheet[discounts][0][base]
我只想更改此字符串的 [0]
(不是完全匹配,而是方括号中的数字)。
我找到了正确的正则表达式:
var name = $(input).attr('name');
var str = name.replace(/\[\d+\]/, '[' + index + ']');
但我也有更复杂的输入名称,例如:sheet[cci][0][terms][0][commit]
我只想更改 方括号中数字的最后一次出现 :
// replace this
sheet[cci][0][terms][0][commit]
// by this
sheet[cci][0][terms][1][commit]
字符串结尾前 [\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
text) 总是包含 no 数字,你可以将它简化为 lookahead for \D*$
(lookahead for non-digit characters, followed by the end of the string):
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 + ']')
)
});
使用一个贪婪的点来消耗(并匹配)所有东西直到最后一个 [0]
:
var name = 'sheet[cci][0][terms][0][commit]';
var index = 3;
var str = name.replace(/(.*)\[\d+\]/, '[' + index + ']');
console.log(str);
此处的替换逻辑是将 [index]
替换放在包含第 t 个输入第一部分的第一个捕获组之后。