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

时间:2017-09-19 16:51:19

标签: javascript

我有一个字符串,它以下列格式表示经度/纬度:

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个单引号(')不会被空格替换。不知道我在这里做错了什么。

请注意,我在此省略了所有错误处理。

5 个答案:

答案 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("'"," ");