2015-04-12 41 views
3

我有{}字符串我怎麼能採取所有這些,他們逆轉,因此,所有{成爲}}成爲{反轉括號{從對}和反之亦然

我不能做到這一點:

str = str.replace("}", "{"); 
str = str.replace("{", "}"); 

因爲那樣會使一個臉一樣那麼它將會取代將全部更改爲同一方向。

我試着這樣做:

str = str.replace(["{", "}"], ["}", "{"]); 

但是,這似乎並不做任何事情(甚至不會報錯了)。

那麼,我能做些什麼來反轉它們呢?

回答

12

你可以使用正則表達式有一個回調函數來解決這個問題:

str.replace(/\{|\}/g, function(match) { 
    return match == "}" ? "{" : "}"; 
}); 
+5

這是最好的答案。使用臨時字符串很容易出錯。 –

+0

由於「g」修飾符的存在,這也替代了一次以上 –

6

您可以使用臨時字符串,肯定會是唯一做交換:

str = str.replace("}", "TEMP_HOLDER"); 
str = str.replace("{", "}"); 
str = str.replace("TEMP_HOLDER", "{"); 

但如果字符串包含臨時字符串這是容易出現的錯誤,它也不能取代一個以上發生。我建議使用Erik的answer

1

您需要在第一遍中轉換爲其他內容,然後在進行其他轉換後轉換爲您想要的內容。

str = str.replace("{", "_###_"); 
str = str.replace("}", "{"); 
str = str.replace("_###_", "}"); 

當然,別的東西將需要的東西,否則不會在你的字符串。如果你確定你的字符串不包含換行符,你可以使用「\ r \ n」。

-1

你可以用兩個階段的一種解決方案:

str = str.replace("}", "~"); 
str = str.replace("{", ","); 

str = str.replace("~", "{"); 
str = str.replace(",", "}");