parseFloat для параметра регулярного выражения, возвращающего NaN - PullRequest
2 голосов
/ 28 июня 2019

Я пытаюсь манипулировать некоторыми значениями с плавающей точкой внутри строки на определенную величину.Для этого у меня есть следующее:

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 ]

5 голосов
/ 28 июня 2019

Ваш код эквивалентен написанию

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 голос
/ 28 июня 2019

См. Определение parseFloat

Число с плавающей запятой, полученное из заданного значения.Если значение не может быть преобразовано в число, возвращается NaN.

Итак, у вас есть строка, которую нельзя преобразовать в число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...