Javascript正则表达式和parseInt

时间:2011-10-18 10:02:11

标签: javascript regex

我有一个JavaScript正则表达式来匹配字符串中的数字,我将其乘以并替换。

'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, parseInt('$1', 10) * 2);

我希望它返回'foo2 bar5.4',但会返回'fooNaN barNaN'

我在这里做错了什么?

3 个答案:

答案 0 :(得分:16)

parseInt('$1', 10) * 2首先执行,其结果传递给replace。您想使用回调函数:

'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function(match, number) {
    return +number * 2;
});

此外,parseInt将向下舍入任何浮点值,因此结果为"foo2 bar4"。相反,您可以使用一元加运算符将任何数字字符串转换为数字。

答案 1 :(得分:1)

您将parseInt('$1', 10) * 2的结果传递给replace函数,而不是语句本身。

相反,您可以函数传递给replace,如下所示:

'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function (str) {
    return parseInt(str, 10) * 2;
});

有关详细信息,请阅读MDC article关于将函数作为参数传递给String.replace

答案 2 :(得分:0)

请注意,如果您有多个分组,则可以执行以下操作:

"p-622-5350".replace(/p-(\d+)-(\d+)/, function (match, g1, g2) { 
    return "p-" + (+g1 * 10) + "-" + (+g2 *10); 
});

(注意函数中的额外参数)