濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > js replace正則相關(guān)的詭異問(wèn)題

js replace正則相關(guān)的詭異問(wèn)題

熱門標(biāo)簽:RO地圖標(biāo)注app 錫林郭勒盟地圖標(biāo)注位置 高德地圖標(biāo)注短信簽約 福州工作銷售電話機(jī)器人 湖南企業(yè)智能外呼系統(tǒng)供應(yīng)商 電銷機(jī)器人公司簡(jiǎn)介 自制電銷機(jī)器人 百音電話機(jī)器人 知名的電話機(jī)器人
 
測(cè)試的昵稱:jesse$

查看代碼:Javascript代碼
復(fù)制代碼 代碼如下:

$id("f_msg_grow_1").innerHTML=msg["not_club"]["grow_value"].replace(/\{NICK_NAME}/,this.info["friend"]["nick_name"]);

看代碼很快可以注意到兩點(diǎn):“replace 正則”和“$ ”。

在js 中replace 支持正則表達(dá)式,而$ 又恰好是正則向后匹配的特殊字符,很容易想到是正則引起的問(wèn)題。而據(jù)我所知正則向后引用只有$1 、$2 、$3 、$4…… ,而這里只有一個(gè)”$” 沒(méi)有數(shù)字。

昵稱“jesse$ ”在后臺(tái)經(jīng)html 特殊字符處理,傳到前端是:“jesse$lt; ”,看頁(yè)面結(jié)果注意到“$” 后的“” 的也被替換了。難道是“$” 在js 里表示正則向后引用的全匹配?

然后去掉了正則,將代碼改成:Javascript代碼
復(fù)制代碼 代碼如下:

$id("f_msg_grow_1").innerHTML=msg["not_club"]["grow_value"].replace("{NICK_NAME}",this.info["friend"]["nick_name"]);

居然還是同樣的結(jié)果,太詭異了!!!

更詭異的是在IE 下查看,居然是顯示正確的(之前一直在ff 下測(cè)試)!

測(cè)試代碼:Javascript代碼
復(fù)制代碼 代碼如下:

document.write("姓名:{NAME}".replace(/\{NAME}/g,"張劍光$"));

IE 和ff 顯示相同:C-sharp代碼
姓名:張劍光{NAME}
經(jīng)測(cè)試,“$” 果真表示正則向后引用的全匹配,算我孤陋,之前居然不知道!

測(cè)試代碼:Javascript代碼
復(fù)制代碼 代碼如下:

document.write("姓名:{NAME}".replace("{NAME}","張劍光$"));

ff 顯示:C-sharp代碼
姓名:張劍光{NAME}amp
IE 顯示:C-sharp代碼
姓名:張劍光$
經(jīng)測(cè)試,ff 下居然replace 即使不用正則,“$” 也表示向后全匹配?。?!
無(wú)語(yǔ)!

查找資料、測(cè)試并總結(jié)如下:

一、

字符

含義

$$

$

$

指定與整個(gè)模式匹配的 stringObj 的部分。

$`

指定由 $ 描述的匹配之前的 stringObj 部分。

$'

指定由 $ 描述的匹配之后的 stringObj 部分。

測(cè)試代碼:

復(fù)制代碼 代碼如下:

document.write("姓名:{NAME}__".replace(/\{NAME}/g,"張劍光$"));
document.write("姓名:{NAME}__".replace(/\{NAME}/g,"張劍光$$"));
document.write("姓名:{NAME}__".replace(/\{NAME}/g,"張劍光$`"));
document.write("姓名:{NAME}__".replace(/\{NAME}/g,"張劍光$'"));

Ie 、ff 和chrome 結(jié)果相同:
復(fù)制代碼 代碼如下:

姓名:張劍光{NAME}amp__姓名:張劍光$__姓名:張劍光姓名:__姓名:張劍光____

二、 ff 和chrome 下replace 不使用正則,也對(duì)上述特殊字符起作用
ie 下replace 不使用正則,對(duì)上述特殊字符不起作用 測(cè)試代碼:
復(fù)制代碼 代碼如下:

document.write("姓名:{NAME}__".replace("{NAME}","張劍光$"));
document.write("姓名:{NAME}__".replace("{NAME}","張劍光$"));
document.write("姓名:{NAME}__".replace("{NAME}","張劍光$$"));
document.write("姓名:{NAME}__".replace("{NAME}","張劍光$`"));
document.write("姓名:{NAME}__".replace("{NAME}","張劍光$'"));

ff 和chrome 結(jié)果:
復(fù)制代碼 代碼如下:

姓名:張劍光{NAME}amp__姓名:張劍光$__姓名:張劍光姓名:__姓名:張劍光____

Ie 結(jié)果:
復(fù)制代碼 代碼如下:

姓名:張劍光$__姓名:張劍光$__姓名:張劍光$$__姓名:張劍光$`__姓名:張劍光$'__

三、 由此,我們?cè)趹?yīng)用replace 等正則相關(guān)函數(shù)時(shí),是否有必要特殊處理下上述存在情況呢?
測(cè)試代碼:
復(fù)制代碼 代碼如下:

var str = "姓名:{NAME}";
var str2 = "$jesse$";
document.write(str.replace(/\{NAME}/g,str2));
document.write("br />");
document.write(str.replace(/\{NAME}/g,str2.replace(/\$/g,'$$$$')));//注意這里是四個(gè)“$”

頁(yè)面顯示:
復(fù)制代碼 代碼如下:

姓名:{NAME}lt;jesse{NAME}lt;
姓名:$jesse$

你還可以自己測(cè)試下:
復(fù)制代碼 代碼如下:

var str = "姓名:{NAME}";
var str2 = "$jesse$";
document.write(str.replace(/\{NAME}/g,str2.replace(/\$/g,'$$')));

比較好的做法是:
復(fù)制代碼 代碼如下:

function tplReplace(str,json){
return str.replace(/{(\w+)}/gi,function(a,b){
return b in json ? json[b] : a;
}
}
您可能感興趣的文章:
  • JavaScript字符串對(duì)象replace方法實(shí)例(用于字符串替換或正則替換)
  • javascript 正則替換 replace(regExp, function)用法
  • JavaScript replace(rgExp,fn)正則替換的用法
  • javascript replace()正則替換實(shí)現(xiàn)代碼
  • js正則函數(shù)match、exec、test、search、replace、split使用介紹集合
  • JS利用正則配合replace替換指定字符
  • js使用正則實(shí)現(xiàn)ReplaceAll全部替換的方法
  • JS使用replace()方法和正則表達(dá)式進(jìn)行字符串的搜索與替換實(shí)例
  • js正則表達(dá)式之replace函數(shù)用法
  • js使用正則實(shí)現(xiàn)ReplaceAll全部替換的方法
  • js使用Replace結(jié)合正則替換重復(fù)出現(xiàn)的字符串功能示例

標(biāo)簽:吉林 茂名 秦皇島 昆明 河北 玉林 怒江 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《js replace正則相關(guān)的詭異問(wèn)題》,本文關(guān)鍵詞  replace,正則,相關(guān),的,詭異,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《js replace正則相關(guān)的詭異問(wèn)題》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于js replace正則相關(guān)的詭異問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    新宁县| 沂南县| 富阳市| 翁牛特旗| 漾濞| 乌苏市| 德令哈市| 新民市| 商洛市| 汝南县| 景谷| 孝感市| 黔西| 禹城市| 甘泉县| 太康县| 醴陵市| 江口县| 海兴县| 宜阳县| 雷州市| 涟源市| 巩义市| 胶州市| 陵川县| 孝义市| 壶关县| 江山市| 西乌珠穆沁旗| 襄樊市| 遵化市| 盐池县| 延津县| 故城县| 芦溪县| 临泽县| 崇仁县| 长武县| 虎林市| 咸宁市| 克拉玛依市|