Используйте RegExp для сопоставления скобкового номера, затем увеличивайте его

Я пытаюсь найти способ сопоставить число в строке Javascript, которая окружена скобками в конце строки, а затем увеличивать ее.

Скажем, у меня есть строка:

var name = "Item Name (4)";

Мне нужен RegExp для соответствия части (4), а затем мне нужно увеличить значение 4, а затем вернуть его в строку.

Это регулярное выражение, которое у меня есть до сих пор:

\b([0-9]+)$\b

Это регулярное выражение не работает. Кроме того, я не знаю, как извлечь полученное целое число и вернуть его в том же месте в строке.

Спасибо.

Ответ 1

Метод replace может принимать функцию в качестве второго аргумента. Он получает совпадение (включая субматрицы) и возвращает заменяющую строку. Другие уже упомянули, что скобки должны быть экранированы.

"Item Name (4)".replace(/\((\d+)\)/, function(fullMatch, n) {
    return "(" + (Number(n) + 1) + ")";
});

Ответ 2

Я могу только думать о способе сделать это в три этапа: Извлечь, увеличить и заменить.

// Tested on rhino
var name = "Item Name (4)";
var re = /\((\d+)\)/;

match = re.exec(name);
number = parseInt(match[1]) + 1;
name = name.replace(re, "(" + number + ")");

Важные части шаблона:

  • Вам нужно сбежать от парнеров для соответствия буквенным параметрам
  • Вам также понадобится использовать parens для захвата числа, чтобы вы могли извлечь его из соответствия.
  • \d соответствует цифре и короче и чаще, чем запись [0-9].

Ответ 3

Чтобы этот шаблон работал, вы избегаете скобок. Кроме того, \b и $не нужны. Таким образом,

var s = "Item Name (4)"; 
var match = /\((\d+)\)/.exec( s ); 
var n = Number(match[1])+1; 
alert( s.replace( /\(\d+\)/, '('+n+')' ) );

Решение david.clarke(проверено)

"Item Name (4)".replace(/\(([0-9]+)\)/, '('+(1+RegExp.$1) + ')');

Но я думаю, что это слишком краткий

UPD: оказалось, что RegExp. $1 не может использоваться как часть параметра replace, потому что он работает только в Opera

Ответ 4

'var name = "Item Name (4)"'.replace(/\(([\d]+)\)/, 1 + $1);

(непроверенные)