以下脚本,我想把str中的数字2经过算术运算+1变成3,但是结果确为"NaN";<script type='text/javascript'>  
     
 var str = "c2",b="";
       b = str.replace(/c(\d)/, (parseInt(RegExp.$1) + 1)+""); //结果:b="NaN";(parseInt(RegExp.$1) + 1)=2</script>
检查了一下这下面这句话(parseInt(RegExp.$1) + 1)的结果是等于3,但为什么3+""="NAN";咧?请教合位大虾,这是咋回事呀???

解决方案 »

  1.   

    parseInt是强制类型转换,把它的参数强制转换为整数
    整数+字串当然无法计算,得到NaN了。
    b = str.replace(/c(\d)/, (parseInt(RegExp.$1) + 1).toString())
      

  2.   

    这这这这这这....
    你正则都有问题,
    是你的parseInt(RegExp.$1) 为NaN,我从来都没听说过会有 3+""=NaN的。
    你输出你正则匹配的,你就明白了。又看到了所谓的 砖家
      

  3.   

    replace的时候,RegExp.$1还不存在<script type='text/javascript'>
    var str = "c2d",b="";
    if(/c(\d)/.test(str))
    b = str.replace(/c(\d)/, (parseInt(RegExp.$1) + 1)); //结果:b="NaN";(parseInt(RegExp.$1) + 1)=2alert(b);
    </script>
      

  4.   


    +13+""结果只可能是"3",不可能为NaN
      

  5.   

    你批评的对,我确实是 砖家,呵呵凌晨时分回帖,眼里只看到parseInt、NaN,其他都没看就敲字回帖了,汗~~
    对楼主的误导,特在此致歉;对于我的回帖给Jparser带来的心情不爽也诚心致歉。如果你觉得这里道歉不足以显示诚意,告诉我一声,我可以另外开贴向你(Jparser )这个真正的专家致歉,呵呵
      

  6.   

    这么说很容易误会,我解释一下:按你的题目的意思,你是要把 str="c2"换成 str="c3",如果是这样,那你的正则就有问题,如果是把str="c2"换成str="3",正则是没问题的。我开始的理解是前面那一成意思,所以就说了你正则都有错。
    后面你可以这么用:
    b=str.replace(/c(\d)/, function(al,su){alert(al+" "+su); return 你的东西});另外可以用exec,或test填充RegExp.$n,然后再用RegExp.$n用,这种方法三楼说得很好了。还有就是,可能是我修养还不够,每次看到这上面的所谓砖家的坑爹言词,都会有点不淡定。说小点是自己没搞很清楚,说大点是误人子弟。自己去查明资料,去实践了再来说,这样不是更好么。我很少发言,因自己水平有限,这次实在受不了了。有冒犯之处还请包含。
      

  7.   

    JParser:
    没有冒犯何来包含?
    你不是修养不够,是年龄不够。过几年你就不这样了,哈。
    客观的说,是人都会犯错误。如果你一天要回帖几十、上百的话,难保不会出状况的。坦率的说,正因为你很少发言,所以可以很冷静的分析别人的回帖;如果你发现“乱讲”的是一个裤衩,你不会激动;一旦发现“乱讲”的是挂星的,血立即上冲,对吗?(看看你8楼“每次看到这上面的所谓砖家的坑爹言词”)....上面这段不是为我自己找借口,只是泛泛的谈谈这种现象。我自己对你的道歉依旧成立
      

  8.   

     var str = "c2",b="";
      b = str.replace(/c(\d)/, function(w){
         var number = w.substr(1) - 0+1;
         return 'c'+number;
    });  
      

  9.   

     var str = "c2",b="";
      b = str.replace(/c(\d)/, "c"+ (parseInt(RegExp.$1)+1));   我是可以的哦.