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

Zac*_*ier 2 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));
Run Code Online (Sandbox Code Playgroud)

怎么就被替换parseFloat("$&")NaN?正确的方法是什么?

Bar*_*mar 5

您的代码相当于编写

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

因为函数参数是调用函数之前求值的。"$&"仅在具有字面意义的情况下才具有特殊含义replace(),它对而言没有任何特殊含义parseFloat(),并且无法replace()到达parseFloat()调用并修改参数。

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

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