我有一个看起来像“(3)新东西”的字符串,其中3可以是任何数字。
我想加上或减去这个数字。
我想出了以下方法:
var thenumber = string.match((/\d+/));
thenumber++;
string = string.replace(/\(\d+\)/ ,'('+ thenumber +')');
有更优雅的方式吗?
答案 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) );