2015-04-12 42 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(",", "}");