2016-04-19 18 views
-1

检索它时我会得到以下内容。javascript .replace()并不会取代每个发生的东西

var data = {"distinct_id"%3A "2222222222222"%2C"%24initial_referrer"%3A "%24direct"%2C"%24initial_referring_domain"%3A "%24direct"} 

如果我检查typeof data,我得到一个字符串返回。

但是,当我尝试用“:”等替换“%3A”来创建适当的对象时,上述对象不会替换所有出现的内容,而只会替换第一个。

data = data.replace(/\%3A/g,":")只替换第一个“%3A”。

我怎样才能做一个正确的对象出这与distinct_id, $initial_referrer as well as we $initial_referring_domain ?

+0

简单的测试证明,否则:一切都将被替换。 – dfsq

+1

按预期工作: - http://ideone.com/NHCElY – rock321987

回答

1

测试代码证明你replace的使用实际上是好的,它确实取代的%3A所有出现:

var data = '{"distinct_id"%3A "2222222222222"%2C"%24initial_referrer"%3A "%24direct"%2C"%24initial_referring_domain"%3A "%24direct"}'; 
 

 
data = data.replace(/\%3A/g, ":"); 
 

 
alert(data);

但是,正则表达式是不正确的方法他因为你也有其他的编码实体。使用decodeURIComponent函数:在控制台

var data = '{"distinct_id"%3A "2222222222222"%2C"%24initial_referrer"%3A "%24direct"%2C"%24initial_referring_domain"%3A "%24direct"}'; 
 

 
data = decodeURIComponent(data); 
 

 
alert(data);

+0

'decodeURIComponent()'是最好的方法,使它成为您的主要答案。 – Tushar