无为清净楼资源网 Design By www.qnjia.com
测试的昵称:jesse$<
查看代码:Javascript代码
复制代码 代码如下:
$id("f_msg_grow_1").innerHTML=msg["not_club"]["grow_value"].replace(/\{NICK_NAME}/,this.info["friend"]["nick_name"]);
看代码很快可以注意到两点:“replace 正则”和“$ ”。
在js 中replace 支持正则表达式,而$ 又恰好是正则向后匹配的特殊字符,很容易想到是正则引起的问题。而据我所知正则向后引用只有$1 、$2 、$3 、$4…… ,而这里只有一个”$” 没有数字。
昵称“jesse$< ”在后台经html 特殊字符处理,传到前端是:“jesse$< ”,看页面结果注意到“$” 后的“&” 的也被替换了。难道是“$&” 在js 里表示正则向后引用的全匹配?
然后去掉了正则,将代码改成:Javascript代码
复制代码 代码如下:
$id("f_msg_grow_1").innerHTML=msg["not_club"]["grow_value"].replace("{NICK_NAME}",this.info["friend"]["nick_name"]);
居然还是同样的结果,太诡异了!!!
更诡异的是在IE 下查看,居然是显示正确的(之前一直在ff 下测试)!
测试代码:Javascript代码
复制代码 代码如下:
document.write("姓名:{NAME}".replace(/\{NAME}/g,"张剑光$&"));
IE 和ff 显示相同:C-sharp代码
姓名:张剑光{NAME}amp;
经测试,“$&” 果真表示正则向后引用的全匹配,算我孤陋,之前居然不知道!
测试代码:Javascript代码
复制代码 代码如下:
document.write("姓名:{NAME}".replace("{NAME}","张剑光$&"));
ff 显示:C-sharp代码
姓名:张剑光{NAME}amp
IE 显示:C-sharp代码
姓名:张剑光$&
经测试,ff 下居然replace 即使不用正则,“$&” 也表示向后全匹配!!!
无语!
查找资料、测试并总结如下:
一、
字符
含义
$$
$
$&
指定与整个模式匹配的 stringObj 的部分。
$`
指定由 $& 描述的匹配之前的 stringObj 部分。
$'
指定由 $& 描述的匹配之后的 stringObj 部分。
测试代码:
复制代码 代码如下: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 结果相同:
复制代码 代码如下:
姓名:张剑光{NAME}amp__姓名:张剑光$__姓名:张剑光姓名:__姓名:张剑光____
二、 ff 和chrome 下replace 不使用正则,也对上述特殊字符起作用
ie 下replace 不使用正则,对上述特殊字符不起作用 测试代码:
复制代码 代码如下:
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 结果:
复制代码 代码如下:
姓名:张剑光{NAME}amp__姓名:张剑光$__姓名:张剑光姓名:__姓名:张剑光____
Ie 结果:
复制代码 代码如下:
姓名:张剑光$&__姓名:张剑光$&__姓名:张剑光$$__姓名:张剑光$`__姓名:张剑光$'__
三、 由此,我们在应用replace 等正则相关函数时,是否有必要特殊处理下上述存在情况呢?
测试代码:
复制代码 代码如下:
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,'$$$$')));//注意这里是四个“$”
页面显示:
复制代码 代码如下:
姓名:{NAME}lt;jesse{NAME}lt;
姓名:$<jesse$<
你还可以自己测试下:
复制代码 代码如下:
var str = "姓名:{NAME}";
var str2 = "$<jesse$<";
document.write(str.replace(/\{NAME}/g,str2.replace(/\$/g,'$$')));
比较好的做法是:
复制代码 代码如下:
function tplReplace(str,json){
return str.replace(/{(\w+)}/gi,function(a,b){
return b in json ? json[b] : a;
}
}
标签:
js,replace,诡异
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年09月21日
2024年09月21日
- 陈慧琳.2002-闪亮每一天新歌+精选2CD【正东】【WAV+CUE】
- 袁培华.1992-有缘【歌林】【WAV+CUE】
- 王瑞霞.1996-是我太软心【名冠】【WAV+CUE】
- 《谭维维 30首经典流行歌曲精选辑 2CD》[WAV/分轨][1.1GB]
- 《赵传 出道三十年全新大碟 你过得还好吗》[WAV/分轨][460MB]
- 《发烧四大天王 磁性男声HiFi发烧碟 2CD》[WAV/分轨][1GB]
- 黑神话悟空上品鼠司空精魄获取方法一览|上品鼠司空精魄收集攻略
- 《真三国无双:起源》新情报将于9月26日公开,实机演示亮相!
- 黑神话悟空上品鼠禁卫精魄获取方法一览|上品鼠禁卫精魄收集攻略
- 优美的旋律至真的情怀《品茶轻音乐·极品典藏Vol.1CD1》[WAV+CUE]
- 曾嵘《峥嵘岁月DSD(试音碟)》WAV+CUE
- 小提琴天碟AlfredoCampoli坎波利-贝多芬D大调小提琴协奏曲与普罗米修斯作品选FLAC
- 博主称本周游戏业内动荡无比:高价PS5 Pro、Xbox裁员等
- 米哈游也搞AI?米哈游AI大模型Glossa完成备案
- G胖变G瘦后:玩家担心其健康状况:如果他出事 游戏业将发生巨变