2013-08-05 41 views
2

我想一个字符串.replace与匹配模式+1(整数)

我目前使用中的更新数量:

savedJobsDiv.innerHTML = savedJobsDiv.innerHTML.replace(/.*\(|\)/gi, parseInt('$1')+1); 

到repalce里面的一些eberythign()括号内用比赛值+1,但它并没有很好的工作,我得到的是NAN33NAN,33是正确的数字,或任何数学运算出来的。

我在哪里出错?

所以我开始字符串是:

random string here (33) 

,我想+1的括号内的数字:

random string here (34) 
+2

请在替换之前发布'savedJobsDiv.innerHTML'和期望的结果。 – georg

+0

如果数字总是在字符串的末尾,你真的需要一个正则表达式吗? – adeneo

回答

3

$1将没有任何价值,因为你有没有相匹配的子组在你的模式。 $1将与括号中表示的第一组相匹配(您有括号,但它们与文字括号相匹配 - 它们不是模式的一部分,即与子组相匹配)。

对于更多的计算替换,比如这样,最好将匹配送到回调函数。

"random string here (33)".replace(/(\()([\d\.]+)(?=\))/g, function($0, $1, $2) { 
    //$0 == whole match; $1 == first bracket; $2 == number 
    return $1+(parseFloat($2)+1); 
}); // == "random string here (34)" 

使用parseFloat允许花车以及整个数字,但两者的工作原理,所以是优选的。

0
var newstr = "random string here (33)".replace(/\((\d+)\)$/,function(cap0,cap1) { 
    return '('+(parseFloat(cap1)+1)+')'; 
}); 
//newstr = "random string here (34)"