Javascript 返回NaN的正则表达式参数上的parseFloat
我试图通过一定量操纵字符串中的一些浮点值。为此,我有以下几点:Javascript 返回NaN的正则表达式参数上的parseFloat,javascript,regex,parameters,Javascript,Regex,Parameters,我试图通过一定量操纵字符串中的一些浮点值。为此,我有以下几点: var字符串=“”; var regex=/[+-]?([0-9]*[.])?[0-9]+/g; log(string.replace(regex,parseFloat(“$&”)+300))请参见语法分析 从给定值解析的浮点数。如果值 无法转换为数字,返回NaN 因此,很明显,这里有一个无法转换为数字的字符串。您的代码相当于编写 var temp = parseFloat("$&") + 300; document.bo
var字符串=“”;
var regex=/[+-]?([0-9]*[.])?[0-9]+/g;
log(string.replace(regex,parseFloat(“$&”)+300))代码>请参见语法分析
从给定值解析的浮点数。如果值
无法转换为数字,返回NaN
因此,很明显,这里有一个无法转换为数字的字符串。您的代码相当于编写
var temp = parseFloat("$&") + 300;
document.body.innerText = string.replace(regex, temp);
因为函数参数是在调用函数之前计算的“$&”
仅当它在replace()
获取的替换字符串中时才具有特殊意义,它对parseFloat()
没有任何特殊意义,replace()
不可能进入parseFloat()
调用并修改参数
如果要调用函数以确定替换,则需要将函数引用传递给replace()
函数,而不是传递包含函数调用的表达式
var字符串=“”;
var regex=/[+-]?([0-9]*[.])?[0-9]+/g;
var newString=string.replace(regex,match=>parseFloat(match)+300);
log(newString)
没错,但是如果我将replace改为“”,它会删除所有的内容,因此它会正确地匹配它们-真正的问题是如何正确地解析它们。如果无法使用parseFloat
解析,则不会发生这种情况。谢谢您的帮助!显然我错过了文档中的“replacement
可以是一个字符串或每个匹配都要调用的函数”部分。我决定使用match=>Math.round((parseFloat(match)+300.0001)*100)/100)
per来删除那些讨厌的浮点错误。如果你想要两个十进制数字,请使用toFixed(parseFloat(match)+300),2)
。它还可以进行必要的四舍五入。对,但这会给没有数字的数字加上数字,这是我不想要的。