Используйте 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);
(непроверенные)