JavaScript:在字符串中添加或减去数字

时间:2009-02-02 18:14:33

标签: javascript regex

我有一个看起来像“(3)新东西”的字符串,其中3可以是任何数字。
我想加上或减去这个数字。

我想出了以下方法:

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

有更优雅的方式吗?

5 个答案:

答案 0 :(得分:5)

另一种方式:

string = string.replace(/\((\d+)\)/ , function($0, $1) { return "(" + (parseInt($1, 10) + 1) + ")"; });

答案 1 :(得分:3)

我相信Gumbo走在正确的轨道上

"(42) plus (1)".replace(/\((\d+)\)/g, function(a,n){ return "("+ (+n+1) +")"; });

答案 2 :(得分:1)

没有扩展String对象,对我来说看起来不错。

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

然后用法:

alert("(2) New Stuff".incrementNumber());

答案 3 :(得分:1)

我相信你的方法是你可以拥有的最好的方法,原因如下:

  • 由于输入不是“干净”数字,您需要涉及某种字符串解析器。使用正则表达式是非常有效的代码方法
  • 通过查看代码,它很清楚它的作用

如果没有把它包装成一个函数,我认为还有很多工作要做

答案 4 :(得分:1)

正如galets所说,我不认为您的解决方案是错误的,但这是一个函数,它将为字符串中指定位置的数字添加指定值。

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) );