如何在JavaScript中用空格替换双引号
我有一个表示经度/纬度的字符串,格式如下: dd°mm“不锈钢”W(注2不锈钢后的单引号) 我使用以下代码转换字符串的十进制表示形式:如何在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
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}
表示出现一次或两次'
。