JavaScript: добавить или вычесть из числа в строке - PullRequest
1 голос
/ 02 февраля 2009

У меня есть строка, которая выглядит как "(3) Новые вещи", где 3 может быть любым числом.
Я хотел бы добавить или вычесть это число.

Я разобрался следующим образом:

var thenumber = string.match((/\d+/));
thenumber++;
string = string.replace(/\(\d+\)/ ,'('+ thenumber +')');

Есть ли более элегантный способ сделать это?

Ответы [ 5 ]

5 голосов
/ 02 февраля 2009

Другой способ:

string = string.replace(/\((\d+)\)/ , function($0, $1) { return "(" + (parseInt($1, 10) + 1) + ")"; });
3 голосов
/ 03 февраля 2009

Я считаю, что Гамбо был на правильном пути

"(42) plus (1)".replace(/\((\d+)\)/g, function(a,n){ return "("+ (+n+1) +")"; });
1 голос
/ 02 февраля 2009

Как говорит Галетс, я не думаю, что ваше решение плохое, но вот функция, которая добавит указанное значение к числу в указанной позиции в строке.

var str = "fluff (3) stringy 9 and 14 other things";

function stringIncrement( str, inc, start ) {
    start = start || 0;
    var count = 0;
    return str.replace( /(\d+)/g, function() {
        if( count++ == start ) {
            return(
                arguments[0]
                .substr( RegExp.lastIndex )
                .replace( /\d+/, parseInt(arguments[1])+inc )
            );
        } else {
            return arguments[0];
        }
    })
}

// fluff (6) stringy 9 and 14 other things :: 3 is added to the first number
alert( stringIncrement(str, 3, 0) );

// fluff (3) stringy 6 and 14 other things :: -3 is added to the second number
alert( stringIncrement(str, -3, 1) );

// fluff (3) stringy 9 and 24 other things :: 10 is added to the third number
alert( stringIncrement(str, 10, 2) );
1 голос
/ 02 февраля 2009

Я считаю, что ваш метод является лучшим изящным, который вы можете иметь по следующим причинам:

  • так как ввод не является "чистым" числом, вам нужно задействовать какой-то синтаксический анализатор строк. Использование регулярных выражений - очень эффективный для кода способ сделать это
  • глядя на код, становится ясно, что он делает

Если не считать обертывания этого в функцию, я не думаю, что можно сделать намного больше

1 голос
/ 02 февраля 2009

Если не считать объекта String, он выглядит хорошо для меня.

String.prototype.incrementNumber = function () {
  var thenumber = string.match((/\d+/));
  thenumber++;
  return this.replace(/\(\d+\)/ ,'('+ thenumber +')');
}

Использование тогда будет:

alert("(2) New Stuff".incrementNumber());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...