2017-09-19 34 views
0
替換雙連續2個引號

我有其代表在以下格式經度/緯度的字符串:如何通過一個空間在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個單引號(')是不能被空間所替代。不知道我在這裏做錯了什麼。

請注意,我已經省略了這裏的所有錯誤處理。

回答

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"] 
+0

感謝您的解決方案。您能否快速解釋正則表達式的作用,並且我會接受您的回答 – BigONotation

+0

我認爲正則表達式足夠簡單。無論如何,'|'表示OR,''{1,2}'表示一次或兩次出現'''。 – ntalbs

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"));

0

對於這些線路:

s = s.replace("'", ' '); 
s = s.replace("''", ' '); 

第一會採取一切「'」並用空格替換它。所以第二個將永遠不會找到兩個引號。

除了 ...替換隻能找到它的第一件事。

所以

"1,2,3,'',4,'',5,''".replace("'", " ").replace("''", ' ') 

給你

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

檢查從@Dij答案爲更好的辦法。

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"));

0

您需要先替換兩個單引號,然後再替換一個單引號。 如果您首先將單引號重新分隔,則兩個單引號會被兩個空格替換(就像您一樣)。

s = s.replace("''"," "); 
s = s.replace("'"," ");