如何在JavaScript中用空格替换双引号

如何在JavaScript中用空格替换双引号,javascript,Javascript,我有一个表示经度/纬度的字符串,格式如下: dd°mm“不锈钢”W(注2不锈钢后的单引号) 我使用以下代码转换字符串的十进制表示形式: function dmsTodegrees(val) { var s = val.replace('°', ' '); s = s.replace("'", ' '); s = s.replace("''", ' '); var tokens = s.split(' '); var result = Number.pars

我有一个表示经度/纬度的字符串,格式如下:

dd°mm“不锈钢”W(注2不锈钢后的单引号)

我使用以下代码转换字符串的十进制表示形式:

function dmsTodegrees(val) {
    var s = val.replace('°', ' ');
    s = s.replace("'", ' ');
    s = s.replace("''", ' ');
    var tokens = s.split(' ');
    var result = Number.parseFloat(tokens[0]) + Number.parseFloat(tokens[1]) / 60 + Number.parseFloat(tokens[2]) / 3600;
    if (tokens[3] === 'W' || tokens[3] === 'S') result = -result;
    return result;
}
然而,似乎
s=s.replace(“”,“”)
没有执行预期的操作,并且2个单引号(')没有被空格替换。我不知道我做错了什么


请注意,我省略了这里的所有错误处理。

您可以使用
/'{1,2}/g
替换字符串中的所有'。如果您不关心数字,并且希望替换所有单引号,则可以使用
/'+/g

函数dmsTodegrees(val){
var s=val.replace(“”,“”);
s=s.replace(/'{1,2}/g',);
返回s;
}

控制台日志(dmsTodegrees(“dd°mm'ss'W”)
您可以使用
/'{1,2}/g
替换字符串中的“全部”。如果您不关心数字,并且希望替换所有单引号,则可以使用
/'+/g

函数dmsTodegrees(val){
var s=val.replace(“”,“”);
s=s.replace(/'{1,2}/g',);
返回s;
}
控制台日志(dmsTodegrees(“dd°mm'ss'W”)

s = s.replace("'", ' ');
s = s.replace("''", ' ');
第一个取每个“”,并用空格替换它。所以第二个永远不会同时找到两个引号

除了…替换只对找到的第一件事起作用

所以

给你

"1,2,3, ',4, ,5,''"
检查@Dij的答案以了解更好的方法。

对于这些行:

s = s.replace("'", ' ');
s = s.replace("''", ' ');
第一个取每个“”,并用空格替换它。所以第二个永远不会同时找到两个引号

除了…替换只对找到的第一件事起作用

所以

给你

"1,2,3, ',4, ,5,''"

检查@Dij的答案以获得更好的方法。

因此,您试图用空格替换
°
'
'
,以便用空格分割字符串。与其用空格替换它们并用空格拆分字符串,不如直接拆分

...
var tokens = val.split(/°|'{1,2}/);
...
它的工作原理如下:

"12.34°56.78'90.12''W".split(/°|'{1,2}/)
=> (4) ["12.34", "56.78", "90.12", "W"]

因此,您正试图用空格替换
°
'
'
,以便用空格分割字符串。与其用空格替换它们并用空格拆分字符串,不如直接拆分

...
var tokens = val.split(/°|'{1,2}/);
...
它的工作原理如下:

"12.34°56.78'90.12''W".split(/°|'{1,2}/)
=> (4) ["12.34", "56.78", "90.12", "W"]

我建议在replace函数的单引号内使用单引号(
'
)和转义序列(
\'

函数dmsTodegrees(val){
var s=val.replace(“”,“”);
s=s。替换(“\”,”);
s=s.replace('\'\'''',);
控制台日志;
var标记=s.split(“”);
var result=Number.parseFloat(令牌[0])+Number.parseFloat(令牌[1])/60+Number.parseFloat(令牌[2])/3600;
如果(令牌[3]==='W'| |令牌[3]=='S')结果=-result;
返回结果;
}

控制台日志(dmsTodegrees(“20°10'30'4”)我建议在replace函数中使用单引号(
'
)和转义序列(
\'

函数dmsTodegrees(val){
var s=val.replace(“”,“”);
s=s。替换(“\”,”);
s=s.replace('\'\'''',);
控制台日志;
var标记=s.split(“”);
var result=Number.parseFloat(令牌[0])+Number.parseFloat(令牌[1])/60+Number.parseFloat(令牌[2])/3600;
如果(令牌[3]==='W'| |令牌[3]=='S')结果=-result;
返回结果;
}

控制台日志(dmsTodegrees(“20°10'30'4”)您需要先替换两个单引号,然后再替换一个单引号。 如果首先重新绘制单引号,即使是两个单引号也会被两个空格替换(就像您的情况一样)


您需要先替换两个单引号,然后再替换一个单引号。 如果首先重新绘制单引号,即使是两个单引号也会被两个空格替换(就像您的情况一样)


谢谢你的解决方案。你能不能快速解释一下regexp的作用,我会接受你的回答。我觉得regexp很简单。无论如何,
|
表示或,
'{1,2}
表示出现一次或两次
'
。感谢您的解决方案。你能不能快速解释一下regexp的作用,我会接受你的回答。我觉得regexp很简单。无论如何,
|
表示或,
'{1,2}
表示出现一次或两次
'