返回NaN的正则表达式参数上的parseFloat

时间:2019-06-28 16:50:50

标签: javascript regex parameters

我正在尝试以一定量操作字符串内的一些浮点值。为此,我需要执行以下操作:

var string = '<path d="M219.6,-71.4C249,19.1,212.7,130.9,135.7,186.8C58.8,242.7,-58.8,242.7,-135.7,186.8C-212.7,130.9,-249,19.1,-219.6,-71.4C-190.2,-161.8,-95.1,-230.9,0,-230.9C95.1,-230.9,190.2,-161.8,219.6,-71.4Z" />';
var regex = /[+-]?([0-9]*[.])?[0-9]+/g;
console.log(string.replace(regex, parseFloat("$&") + 300));

为什么用parseFloat("$&")取代NaN?正确的方法是什么?

2 个答案:

答案 0 :(得分:5)

您的代码等同于编写

var temp = parseFloat("$&") + 300;
document.body.innerText = string.replace(regex, temp);

因为在调用函数之前先在 中对函数参数进行了评估。 "$&"仅在replace()得到的替换字符串中有特殊含义时,对parseFloat()没有任何特殊含义,并且replace()不可能进入parseFloat()调用并修改参数。

如果要调用函数来确定替换,则需要将函数引用传递给replace()函数,而不是包含函数调用的表达式。

var string = '<path d="M219.6,-71.4C249,19.1,212.7,130.9,135.7,186.8C58.8,242.7,-58.8,242.7,-135.7,186.8C-212.7,130.9,-249,19.1,-219.6,-71.4C-190.2,-161.8,-95.1,-230.9,0,-230.9C95.1,-230.9,190.2,-161.8,219.6,-71.4Z" />';
var regex = /[+-]?([0-9]*[.])?[0-9]+/g;
var newString = string.replace(regex, match => parseFloat(match) + 300);
console.log(newString)

答案 1 :(得分:1)

请参阅parseFloat definition

  

从给定值解析的浮点数。如果值   无法转换为数字,则返回NaN。

很明显,您那里有一个不能转换为数字的字符串。