我有一个用于在字符串中匹配数字的 JavaScript 正则表达式,我想要对其进行乘法运算并替换。
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, parseInt('$1', 10) * 2);
我希望它返回'foo2 bar5.4'
,但它返回'fooNaN barNaN'
。我做错了什么?我有一个用于在字符串中匹配数字的 JavaScript 正则表达式,我想要对其进行乘法运算并替换。
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, parseInt('$1', 10) * 2);
我希望它返回'foo2 bar5.4'
,但它返回'fooNaN barNaN'
。我做错了什么?首先执行parseInt('$1', 10) * 2
,并将其结果传递给replace
。您需要使用一个回调函数:
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function(match, number) {
return +number * 2;
});
此外,parseInt
会将任何浮点数值向下舍入,因此结果将为 "foo2 bar4"
。相反,您可以使用 一元加运算符 将任何数字字符串转换为数字。
你正在将 parseInt('$1', 10) * 2
的结果传递给 replace
函数,而不是传递语句本身。
相反,你可以像这样向 replace
函数传递一个函数:
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function (str) {
return parseInt(str, 10) * 2;
});
欲获得更多信息,请阅读 MDC文章,了解如何将函数作为参数传递给String.replace
"p-622-5350".replace(/p-(\d+)-(\d+)/, function (match, g1, g2) {
return "p-" + (+g1 * 10) + "-" + (+g2 *10);
});
(请注意函数中的额外参数)