记一则js替换字符串的问题
2019獨角獸企業重金招聘Python工程師標準>>>
軟件的一處功能用到EasyUI的表單提交,返回一串字符串,這串字符串里有一段HTML代碼,正常的情況下這段HTML代碼里的雙引號“ ?是用 \ 轉義過的。在IE中沒問題,但是在Firefox和Chrome里那段字符串就自動加上了"而且原來的雙引號還在。但是看響應內容的字符串就沒有。用firebug調試的時候輸出來的字符串就變了。
請求響應和IE中是這樣
{"id":2,"title":"文章標題","info":"<span?class=\"ke-insertfile\">詳見附件。</span>"}Firefox和Chrome中是這樣
{"id":2,"title":"文章標題","info":"<span?class="\"ke-insertfile\"">詳見附件。</span>"}沒有經過任何處理,一串字符串自動就變成這樣了。真不知道Firefox和Chrome怎么處理的。
這串字符串需要變成json對象,所以只能把多出來的東西替換掉。
js中replace方法只能替換第一個匹配的字符串不能做到全局。所以就上網查了下資料,得到的方法有幾種:
1. str.replace(/oldString/g,newString)
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()的方法了。
轉載于:https://my.oschina.net/u/568577/blog/417046
總結
以上是生活随笔為你收集整理的记一则js替换字符串的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse的tomcat运行mave
- 下一篇: python序列切片