看別的博客有用eval執行正則表達式的寫法,前端
1 //替換指定傳入參數的值,paramName爲參數,replaceWith爲新值 2 function replaceParamVal(paramName,replaceWith) { 3 var oUrl = this.location.href.toString(); 4 var re=eval('/('+ paramName+'=)([^&]*)/gi'); 5 var nUrl = oUrl.replace(re,paramName+'='+replaceWith); 6 this.location = nUrl; 7 }
會提示eval can be harmful正則表達式
而後有文章又給出eval的替代方案:工具
1 //計算表達式的值 2 function evil(fn) { 3 var Fn = Function; //一個變量指向Function,防止有些前端編譯工具報錯 4 return new Fn('return ' + fn)(); 5 }
其實從一開始就走偏了,eval這種寫法應該摒棄,並且用evil替代方案這種奇淫巧計不在關鍵時候更是不要用,能夠把直接量語法改寫爲RegExp對象語法優化
優化後最終可以使用版本以下:this
1 // 替換指定傳入參數的值,oUrl爲連接,paramName爲參數,replaceWith爲新值 2 function replaceParamVal (oUrl, paramName, replaceWith) { 3 var re = new RegExp('(' + paramName + '=)([^&]*)', 'gi') 4 var nUrl = oUrl.replace(re, paramName + '=' + replaceWith) 5 console.log('replaceParamVal:' + nUrl) 6 return nUrl 7 }