Используйте RegExp, чтобы сопоставить число в скобках, а затем увеличить его - PullRequest
8 голосов
/ 08 января 2009

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

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

var name = "Item Name (4)";

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

У меня есть такое регулярное выражение:

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

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

Спасибо.

Ответы [ 4 ]

20 голосов
/ 08 января 2009

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

"Item Name (4)".replace(/\((\d+)\)/, function(fullMatch, n) {
    return "(" + (Number(n) + 1) + ")";
});
0 голосов
/ 08 января 2009

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

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

0 голосов
/ 08 января 2009

Чтобы этот шаблон работал, вы должны избежать скобок. Кроме того, \ 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

0 голосов
/ 08 января 2009

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

// 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 + ")");

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

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