У меня есть следующая строка:
[group][100][250][3][person]
и мне нужно увеличить число 3
. Я попробовал regex /\[\d+\]/
который соответствует всем 3, но я не мог никуда /\[\d+\]/
.
Вы можете сделать это, сопоставляя все 3 ваших числовых значения и просто увеличивая третье:
var regex = /\[(\d+)\]\[(\d+)\]\[(\d+)\]/g
var input = "[group][100][250][3][person]";
var result = input.replace(regex, function(match,p1,p2,p3){
return "[" + p1 + "][" + p2 + "][" + (parseInt(p3,10) + 1) + "]"
})
console.log(result);
Вы можете использовать .replace
с функцией обратного вызова:
var s = "[group][100][250][3][person]";
var repl = s.replace(/((?:\[\d+\]){2}\[)(\d+)\]/,
function($0, $1, $2) { return $1 + (parseInt($2)+1) + ']'; }
);
console.log(repl);
//=> "[group][100][250][4][person]"
Чтобы захватить "вашу" строку, попробуйте следующее регулярное выражение:
(?:\[\d+\]){2}\[(\d+)\]
Как это устроено:
(?:...){2}
- не захватывающая группа, которая происходит 2 раза.\[\d+\]
- содержащий [
, последовательность цифр и ]
.[
, группа захвата - последовательность цифр и ]
.Текст, который вы хотите захватить, находится в первом захвате.