Javascript 删除字符串中小数开头和结尾的双引号

Javascript 删除字符串中小数开头和结尾的双引号,javascript,regex,Javascript,Regex,我有以下字符串,希望删除小数前面和后面的所有双引号,保留其他引号 "{"id":"default","values":{"level1":["0.0000","0.0000","0.0000"],"level2":["1.0000","1.0000","1.0000"], "score":"2.1100"}}" 应该是 "{"id":"default","values":{"level1":[0.0000,0.0000,0.0000],"level2":[1.0000,1.0000,1.000

我有以下字符串,希望删除小数前面和后面的所有双引号,保留其他引号

"{"id":"default","values":{"level1":["0.0000","0.0000","0.0000"],"level2":["1.0000","1.0000","1.0000"], "score":"2.1100"}}"
应该是

"{"id":"default","values":{"level1":[0.0000,0.0000,0.0000],"level2":[1.0000,1.0000,1.0000], "score":2.1100}}"
使用
replace(/\”(?=[0-9]\.[0-9]+)/g,”)
我设法消除了数字开头的双引号,但无法找出如何处理结尾的引号。

replace
/”(\d[.]\d+)/g
by
$1
$1指第一个捕获组,即
\d[.]\d+/code>(不带引号的内容)。
\d
只是
[0-9]
的快捷方式

> var str = '{"id":"default","values":{"level1":["0.0000","0.0000","0.0000"],"level2":["1.0000","1.0000","1.0000"], "score":"2.1100"}}';
undefined
> str.replace(/"(\d[.]\d+)"/g,"$1")
'{"id":"default","values":{"level1":[0.0000,0.0000,0.0000],"level2":[1.0000,1.0000,1.0000], "score":2.1100}}'
/”(\d[.]\d+)/g
替换为
$1
$1
表示第一个捕获组,即
\d[.]\d+
(不带引号的内容)。
\d
只是
[0-9]
的快捷方式

> var str = '{"id":"default","values":{"level1":["0.0000","0.0000","0.0000"],"level2":["1.0000","1.0000","1.0000"], "score":"2.1100"}}';
undefined
> str.replace(/"(\d[.]\d+)"/g,"$1")
'{"id":"default","values":{"level1":[0.0000,0.0000,0.0000],"level2":[1.0000,1.0000,1.0000], "score":2.1100}}'

对于上述字符串,您可以使用<代码> JSON.PARSER()/<代码>将其解析为JavaScript对象,然后在需要考虑的值上使用<代码> PARSEFLAUTE(<)>代码>
var str = '{"id":"default","values":{"level1":["0.0000","0.0000","0.0000"],"level2":["1.0000","1.0000","1.0000"], "score":"2.1100"}}';

str = JSON.parse(str);
str.values.level1 = str.values.level1.map(function(_item) { return parseFloat(_item); });
str.values.level2 = str.values.level2.map(function(_item) { return parseFloat(_item); });
str.values.score = parseFloat(str.values.score);

// if you need it back as a JSON string
str = JSON.stringify(str);

对于上述字符串,您可以使用<代码> JSON.PARSER()/<代码>将其解析为JavaScript对象,然后在需要考虑的值上使用<代码> PARSEFLAUTE(<)>代码>
var str = '{"id":"default","values":{"level1":["0.0000","0.0000","0.0000"],"level2":["1.0000","1.0000","1.0000"], "score":"2.1100"}}';

str = JSON.parse(str);
str.values.level1 = str.values.level1.map(function(_item) { return parseFloat(_item); });
str.values.level2 = str.values.level2.map(function(_item) { return parseFloat(_item); });
str.values.score = parseFloat(str.values.score);

// if you need it back as a JSON string
str = JSON.stringify(str);


您可以捕获表达式(包括结束引号)并替换为修剪文本(修剪引号)。这看起来像JSON。如果您先创建一个对象,然后处理它,而不是将其视为原始字符串,这不是更好吗?您是否计划在某个时候将其解析为JS对象,因为如果是,删除引号只会将数字四舍五入到最接近的非零数字:
0.0000
将变为
0
1.0000
将变成
1
2.1100
将变成
2.11
。我的问题是,我需要将JSON对象发送到的服务器只接受十进制数字(我对此无能为力)。这意味着它希望数字1是1.000,但它不将它们作为字符串,它希望它们是”Double“您可以捕获表达式(包括结束引号)并替换为修剪文本(修剪引号)。这看起来像JSON。如果您先创建一个对象,然后处理它,而不是将其视为原始字符串,这不是更好吗?您是否计划在某个时候将其解析为JS对象,因为如果是,删除引号只会将数字四舍五入到最接近的非零数字:
0.0000
将变为
0
1.0000
将变成
1
2.1100
将变成
2.11
。我的问题是,我需要将JSON对象发送到的服务器只接受十进制数字(我对此无能为力)。这意味着它希望数字1是1.000,但它不将它们作为字符串,它希望它们是”Double“+1:比regex IMO更好的选择。我的问题是,我需要将JSON对象发送到的服务器只接受十进制数字(我对此无能为力)。这意味着它期望数字1为1.0000。这就是为什么我实际应用toFixed于所有数字,调用JSON.stringify,现在需要显示“字符串数字”“如果没有双引号,在这种情况下,上述输出(在最终字符串化之后)应该可以完成任务。@Casimir et Hippolyte-感谢您的更正。:-)您的解决方案在我的情况下不起作用,因为在对象字符串化之后,所有值都是数字,在JSON中可以是整数或双精度。小数点丢失了。“{”id:“default”,“values:“{”level1:[0,0,0],“level2:[1,1,1],“score”:2.11}}”+1:比regex IMO更好的选择。我的问题是,我需要将JSON对象发送到的服务器只接受十进制数(我对此无能为力)。表示它期望数字1为1.0000。这就是为什么我实际应用toFixed在所有数字上,调用JSON.stringify,现在需要显示不带双引号的“字符串数字”。在这种情况下,上述输出(在最终stringify之后)应该可以完成这项工作。@Casimir et Hippolyte-感谢您的更正。:-)在我的例子中,您的解决方案不起作用,因为在对象字符串化之后,所有值都是数字,在JSON中可以是整数或双精度数。小数点丢失了。“{”id:“default”,“values:{”level1:[0,0,0],“level2:[1,1,1],“score”:2.11}}”谢谢,我不知道是否可以引用该组。它与“$1”一起使用。我会将此标记为一个答案,因为它实际上执行了所要求的操作—以字符串形式替换。谢谢,我不知道引用该组的可能性。它与“$1”一起使用。我将把它标记为一个答案,因为它实际上做了被问到的事情——用字符串替换