我正在尝试以一定量操作字符串内的一些浮点值。为此,我需要执行以下操作:
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
?正确的方法是什么?
答案 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)