记一则js替换字符串的问题

软件的一处功能用到EasyUI的表单提交,返回一串字符串,这串字符串里有一段HTML代码,正常的状况下这段HTML代码里的双引号“  是用 \ 转义过的。在IE中没问题,可是在Firefox和Chrome里那段字符串就自动加上了"并且原来的双引号还在。可是看响应内容的字符串就没有。用firebug调试的时候输出来的字符串就变了。正则表达式

请求响应和IE中是这样json

{"id":2,"title":"文章标题","info":"<span class=\"ke-insertfile\">详见附件。</span>"}

Firefox和Chrome中是这样this

{"id":2,"title":"文章标题","info":"<span class="\&quot;ke-insertfile\&quot;">详见附件。</span>"}

没有通过任何处理,一串字符串自动就变成这样了。真不知道Firefox和Chrome怎么处理的。spa

这串字符串须要变成json对象,因此只能把多出来的东西替换掉。prototype

js中replace方法只能替换第一个匹配的字符串不能作到全局。因此就上网查了下资料,获得的方法有几种:调试

1. str.replace(/oldString/g,newString)code

2. str.replace(new RegExp(oldString,"gm"),newString)对象

3. 增长String 对象原型方法 replaceAll字符串

String.prototype.replaceAll = function (s1,s2){
return this .replace( new RegExp(s1, "gm" ),s2);
}

我首先用的是直接增长String对象的原型方法,加上了之后任何一个地方均可以用。原型

可是试了将近一下午,因为我对正则表达式不怎么会用。最后怎么都匹配不了。

须要替换的有两个

把"\&quot;变成\"
把\&quot;"变成\"

第二个好弄,replaceAll('\\&quot;','\\"')这样直接就替换了。

第一个用replaceAll('\\\"&quot;','\\"')怎么也替换不了。

试了好多种,前面能匹配那个 ",而后 \ 就匹配不上。

直接用replaceAll('\\','')这样还报错,不能以 \ 结尾。

无论怎么匹配,"\&quot; 中匹配 " 能够,匹配后面的&quot;也能够,就是匹配不到 \ 

无奈今天早上忽然想起来,换个方法,上面第2种方法其实和第三种同样。就换了第一种方法。

开始忽略了引号 replace(/"\\&quot;/g,'\\"')replace('/"\\&quot;/g','\\"')是两个彻底不同的东西。

实践证实前面的是对的。前面的是表达式,后面的是字符串。而后我就豁然开朗。难道是这个缘由?

因而就回去试replaceAll(),结果第一个参数必须是字符串,不支持表达式。只能仍是用replace()的方法了。

相关文章
相关标签/搜索