Javascript 替换字符串中的浮点数时出现问题

Javascript 替换字符串中的浮点数时出现问题,javascript,regex,replace,Javascript,Regex,Replace,我有以下字符串: 'd="M4.125,4 L4.25,1 L4.375,4 L4.5,4.125 L7.5,4.25 L4.5,4.375 L4.375,4.5 L4.25,7.5 L4.125,4.5 L4,4.375 L1,4.25 L4,4.125z" d="M4.125,4 L4.25,2.5 L4.375,4 L4.5,4.125 L6,4.25 L4.5,4.375 L4.375,4.5 L4.25,6 L4.125,4.5 L4,4.375 L2.5,4.25 L4,4.125z

我有以下字符串:

'd="M4.125,4 L4.25,1 L4.375,4 L4.5,4.125 L7.5,4.25 L4.5,4.375 L4.375,4.5 L4.25,7.5 L4.125,4.5 L4,4.375 L1,4.25 L4,4.125z" d="M4.125,4 L4.25,2.5 L4.375,4 L4.5,4.125 L6,4.25 L4.5,4.375 L4.375,4.5 L4.25,6 L4.125,4.5 L4,4.375 L2.5,4.25 L4,4.125z"'
我需要提取所有数字(
float
int
),将它们乘以
5
,并用结果替换它们

所以我试着做了以下几点:

var x = 'd="M4.125,4 L4.25,1 L4.375,4 L4.5,4.125 L7.5,4.25 L4.5,4.375 L4.375,4.5 L4.25,7.5 L4.125,4.5 L4,4.375 L1,4.25 L4,4.125z" d="M4.125,4 L4.25,2.5 L4.375,4 L4.5,4.125 L6,4.25 L4.5,4.375 L4.375,4.5 L4.25,6 L4.125,4.5 L4,4.375 L2.5,4.25 L4,4.125z"'
var reg = /(\d\.*\d{0,3})/g
var match = x.match(reg);

for (i = 0; i < match.length; i++) {
    x = x.replace(new RegExp(match[i], 'g'), match[i] * 5)
}

console.log(match)
console.log(x)
这对于
x

"d="M20.3025,20 L20.25,5 L20.375,20 L20.5,20.3025 L337.5,20.25 L20.5,20.375 L20.375,20.5 L20.25,337.5 L20.3025,20.5 L20,20.375 L5,20.25 L20,20.3025z" d="M20.3025,20 L20.25,112.5 L20.375,20 L20.5,20.3025 L30,20.25 L20.5,20.375 L20.375,20.5 L20.25,30 L20.3025,20.5 L20,20.375 L112.5,20.25 L20,20.3025z""
     ^^^^^^^     ^^^^^    ^^^^^^     ^^^^ ^^^^^^^  ^^^^^ ^^^^^  
如您所见,第一个数字是
20.3025
,但我希望它是
20.625

字符串
x
中的数字应替换为以下数字

Array [ 20.625, 20, 21.25, 5, 21.875, 20, 22.5, 20.625, 37.5, 21.25, 38 more… ]

我做错了什么?另外,请告诉我是否有任何简单的方法可以做到这一点。

这是因为您对匹配元素使用了循环。使用它,您可以为每个匹配元素重复
x
的替换操作。循环的每一次迭代都会应用到一个已更改的
x
字符串,因此最终结果不是您期望的结果

如果您将
match[i]
的te值转换为
Number
,并使用更直接/更简单的方法替换字符串中的数字,则此方法有效

var x='d=“M4.125,4 L4.25,1 L4.375,4 L4.5,4.125 L7.5,4.25 L4.5,4.375”+
“L4.375,4.5 L4.25,7.5 L4.125,4.5 L4,4.375 L1,4.25 L4,4.125z”+
'd=“M4.125,4 L4.25,2.5 L4.375,4 L4.5,4.125 L6,4.25 L4.5,4.375”+
‘L4.375,4.5 L4.25,6 L4.125,4.5 L4,4.375 L2.5,4.25 L4,4.125z’;
var reg=/(\d\.*\d{0,3})/g
var匹配=x.匹配(reg);
var报告=document.querySelector(“#result”);
report.innerHTML='x最初:'+x+'
'; //更简单的方法 x=x.replace(reg,函数(a){return+a*5;}); report.innerHTML+='x之后:'+x+'
match:'+match.join(',')
这是因为对匹配元素使用循环。使用它,您可以为每个匹配元素重复
x
的替换操作。循环的每一次迭代都会应用到一个已更改的
x
字符串,因此最终结果不是您期望的结果

如果您将
match[i]
的te值转换为
Number
,并使用更直接/更简单的方法替换字符串中的数字,则此方法有效

var x='d=“M4.125,4 L4.25,1 L4.375,4 L4.5,4.125 L7.5,4.25 L4.5,4.375”+
“L4.375,4.5 L4.25,7.5 L4.125,4.5 L4,4.375 L1,4.25 L4,4.125z”+
'd=“M4.125,4 L4.25,2.5 L4.375,4 L4.5,4.125 L6,4.25 L4.5,4.375”+
‘L4.375,4.5 L4.25,6 L4.125,4.5 L4,4.375 L2.5,4.25 L4,4.125z’;
var reg=/(\d\.*\d{0,3})/g
var匹配=x.匹配(reg);
var报告=document.querySelector(“#result”);
report.innerHTML='x最初:'+x+'
'; //更简单的方法 x=x.replace(reg,函数(a){return+a*5;}); report.innerHTML+='x之后:'+x+'
match:'+match.join(',')
这是因为对匹配元素使用循环。使用它,您可以为每个匹配元素重复
x
的替换操作。循环的每一次迭代都会应用到一个已更改的
x
字符串,因此最终结果不是您期望的结果

如果您将
match[i]
的te值转换为
Number
,并使用更直接/更简单的方法替换字符串中的数字,则此方法有效

var x='d=“M4.125,4 L4.25,1 L4.375,4 L4.5,4.125 L7.5,4.25 L4.5,4.375”+
“L4.375,4.5 L4.25,7.5 L4.125,4.5 L4,4.375 L1,4.25 L4,4.125z”+
'd=“M4.125,4 L4.25,2.5 L4.375,4 L4.5,4.125 L6,4.25 L4.5,4.375”+
‘L4.375,4.5 L4.25,6 L4.125,4.5 L4,4.375 L2.5,4.25 L4,4.125z’;
var reg=/(\d\.*\d{0,3})/g
var匹配=x.匹配(reg);
var报告=document.querySelector(“#result”);
report.innerHTML='x最初:'+x+'
'; //更简单的方法 x=x.replace(reg,函数(a){return+a*5;}); report.innerHTML+='x之后:'+x+'
match:'+match.join(',')
这是因为对匹配元素使用循环。使用它,您可以为每个匹配元素重复
x
的替换操作。循环的每一次迭代都会应用到一个已更改的
x
字符串,因此最终结果不是您期望的结果

如果您将
match[i]
的te值转换为
Number
,并使用更直接/更简单的方法替换字符串中的数字,则此方法有效

var x='d=“M4.125,4 L4.25,1 L4.375,4 L4.5,4.125 L7.5,4.25 L4.5,4.375”+
“L4.375,4.5 L4.25,7.5 L4.125,4.5 L4,4.375 L1,4.25 L4,4.125z”+
'd=“M4.125,4 L4.25,2.5 L4.375,4 L4.5,4.125 L6,4.25 L4.5,4.375”+
‘L4.375,4.5 L4.25,6 L4.125,4.5 L4,4.375 L2.5,4.25 L4,4.125z’;
var reg=/(\d\.*\d{0,3})/g
var匹配=x.匹配(reg);
var报告=document.querySelector(“#result”);
report.innerHTML='x最初:'+x+'
'; //更简单的方法 x=x.replace(reg,函数(a){return+a*5;}); report.innerHTML+='x之后:'+x+'
match:'+match.join(',')
如果我使用您使用的字符串,即使我没有将数字转换为
数字(
+
),我的代码也可以工作。------------>@chipChocolate.py:try
x=x.replace(reg,function(a,b){return+a*5;}),请参阅@chipChocolate.py:很高兴我能帮上忙。不知道为什么“它”会这样做,但我现在得赶火车。也许我以后会调查,我认为这与比赛结果有关array@chipChocolate.py我已经在答案中添加了一个解释。如果我使用您使用的字符串,即使我没有将数字转换为
数字
+
),我的代码仍然有效。------------>@chipChocolate.py:try
x=x.replace(reg,function(a,b){return+a*5;}),请参阅@chipChocolate.py:很高兴我能帮上忙。不知道为什么“它”会这样做,但我现在得赶火车。也许我以后会调查,我认为这与比赛结果有关array@chipChocolate.py我已经在答案中添加了一个解释。如果我使用您使用的字符串,即使我没有将数字转换为
数字
+
),我的代码仍然有效。------------>@chipChocolate.py:try
x=x.replace(reg,function(a,b){return+a*5;})Array [ 20.625, 20, 21.25, 5, 21.875, 20, 22.5, 20.625, 37.5, 21.25, 38 more… ]