我有一个字符串,它以下列格式表示经度/纬度:
dd°mm'ss''W(在ss之后注释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个单引号(')不会被空格替换。不知道我在这里做错了什么。
请注意,我在此省略了所有错误处理。
答案 0 :(得分:3)
您可以使用/'{1,2}/g
替换字符串中的所有内容。如果您不关心该号码并想要替换所有单引号,则可以使用/'+/g
function dmsTodegrees(val) {
var s = val.replace('°', ' ');
s = s.replace(/'{1,2}/g, ' ');
return s;
}
console.log(dmsTodegrees("dd°mm'ss''W"));
答案 1 :(得分:1)
因此,您尝试用空格替换°
,'
和''
,以便将字符串与空格分开。而不是用空格替换它们并用空格分割字符串,为什么不直接拆分?
...
var tokens = val.split(/°|'{1,2}/);
...
它的工作原理如下:
"12.34°56.78'90.12''W".split(/°|'{1,2}/)
=> (4) ["12.34", "56.78", "90.12", "W"]
答案 2 :(得分:0)
对于这些行:
s = s.replace("'", ' ');
s = s.replace("''", ' ');
第一个需要每个"'"并用空格替换它。所以第二个永远不会找到两个引号。
除了 ...替换仅适用于它找到的第一件事。
所以
"1,2,3,'',4,'',5,''".replace("'", " ").replace("''", ' ')
给你
"1,2,3, ',4, ,5,''"
检查@Dij的答案以获得更好的方法。
答案 3 :(得分:0)
我建议在单引号内使用单引号('
)和转义序列(\'
)替换函数
function dmsTodegrees(val) {
var s = val.replace('°', ' ');
s = s.replace('\'', ' ');
s = s.replace('\'\'', ' ');
console.log(s);
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;
}
console.log(dmsTodegrees("20°10'30''4"));

答案 4 :(得分:0)
您需要先替换两个单引号,然后再替换一个引号。 如果你首先重新使用单引号,即使两个单引号也会被两个空格替换(就像你的情况一样)。
s = s.replace("''"," ");
s = s.replace("'"," ");