当前位置:  编程技术>其它

js replace正则相关的诡异问题

    来源: 互联网  发布时间:2014-10-15

    本文导语:   测试的昵称:jesse$< 查看代码:Javascript代码 代码如下: $id("f_msg_grow_1").innerHTML=msg["not_club"]["grow_value"].replace(/{NICK_NAME}/,this.info["friend"]["nick_name"]); 看代码很快可以注意到两点:“replace 正则”和“$ ”。 在js 中replace 支持正则...

 
测试的昵称: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 = "$

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.nio.charset类codingerroraction的类成员方法: replace定义及介绍
  • eregi_replace与preg_replace 函数代码的用法比较
  • java命名空间java.nio.charset类charsetencoder的类成员方法: replacement定义及介绍
  • MYSQL 批量替换之replace语法的使用详解
  • java命名空间java.nio.charset类charsetdecoder的类成员方法: replacement定义及介绍
  • SQL SERVER使用REPLACE将某一列字段中的某个值替换为其他的值
  • java命名空间javax.xml.stream类xmlinputfactory成员方法: is_replacing_entity_references定义参考
  • jsp中replace怎么没有啊?
  • java命名空间javax.swing.text类abstractdocument.branchelement的类成员方法: replace定义及介绍
  • SQL中函数 replace 的参数1的数据类型ntext无效的解决方法
  • java命名空间javax.swing类grouplayout的类成员方法: replace定义及介绍
  • JSP中的字符替换函数 str_replace() 实现!
  • java命名空间javax.swing.text类gapcontent的类成员方法: replace定义及介绍
  • Python中replace方法实例分析
  • java命名空间javax.swing.text类asyncboxview的类成员方法: replace定义及介绍
  • Sql Server中REPLACE函数用法实例
  • java命名空间javax.swing.text类tableview的类成员方法: replace定义及介绍
  • Replace关键字的妙用查询是否包含某个特定字符串
  • java命名空间java.lang类string的类成员方法: replace定义及介绍
  • 浅析MySQL replace into 的用法
  • java命名空间javax.swing.text类boxview的类成员方法: replace定义及介绍
  • replace的使用




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3