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:tryx=x.replace(reg,function(a,b){return+a*5;})代码>,请参阅@chipChocolate.py:很高兴我能帮上忙。不知道为什么“它”会这样做,但我现在得赶火车。也许我以后会调查,我认为这与比赛结果有关array@chipChocolate.py我已经在答案中添加了一个解释。如果我使用您使用的字符串,即使我没有将数字转换为数字
(+
),我的代码仍然有效。------------>@chipChocolate.py:tryx=x.replace(reg,function(a,b){return+a*5;})代码>,请参阅@chipChocolate.py:很高兴我能帮上忙。不知道为什么“它”会这样做,但我现在得赶火车。也许我以后会调查,我认为这与比赛结果有关array@chipChocolate.py我已经在答案中添加了一个解释。如果我使用您使用的字符串,即使我没有将数字转换为数字
(+
),我的代码仍然有效。------------>@chipChocolate.py:tryx=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… ]