軟件的一處功能用到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="\"ke-insertfile\"">詳見附件。</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對象的原型方法,加上了之後任何一個地方均可以用。原型
可是試了將近一下午,因爲我對正則表達式不怎麼會用。最後怎麼都匹配不了。
須要替換的有兩個
把"\"變成\" 把\""變成\"
第二個好弄,replaceAll('\\"','\\"')這樣直接就替換了。
第一個用replaceAll('\\\""','\\"')怎麼也替換不了。
試了好多種,前面能匹配那個 ",而後 \ 就匹配不上。
直接用replaceAll('\\','')這樣還報錯,不能以 \ 結尾。
無論怎麼匹配,"\" 中匹配 " 能夠,匹配後面的"也能夠,就是匹配不到 \
無奈今天早上忽然想起來,換個方法,上面第2種方法其實和第三種同樣。就換了第一種方法。
開始忽略了引號 replace(/"\\"/g,'\\"')與replace('/"\\"/g','\\"')是兩個徹底不同的東西。
實踐證實前面的是對的。前面的是表達式,後面的是字符串。而後我就豁然開朗。難道是這個緣由?
因而就回去試replaceAll(),結果第一個參數必須是字符串,不支持表達式。只能仍是用replace()的方法了。