記一則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()的方法了。

相關文章
相關標籤/搜索