`
jianguang_qq
  • 浏览: 91786 次
  • 性别: Icon_minigender_1
  • 来自: 深圳南山
社区版块
存档分类
最新评论

发现一个js replace正则相关的诡异问题

阅读更多

最近做会员个人身份页的时候遇上如下问题:

测试的昵称:jesse$<

查看代码: 看代码很快可以注意到两点:“replace 正则”和“$ ”。

jsreplace 支持正则表达式,而$ 又恰好是正则向后匹配的特殊字符,很容易想到是正则引起的问题。而据我所知正则向后引用只有$1$2$3$4…… ,而这里只有一个”$” 没有数字。

昵称“jesse$< ”在后台经html 特殊字符处理,传到前端是:“jesse$&lt; ”,看页面结果注意到“$” 后的“&” 的也被替换了。难道是“$&”js 里表示正则向后引用的全匹配?

然后去掉了正则,将代码改成: 居然还是同样的结果,太诡异了!!!

更诡异的是在IE 下查看,居然是显示正确的(之前一直在ff 下测试)!

测试代码: IE ff 显示相同: 经测试,“$&” 果真表示正则向后引用的全匹配,算我孤陋,之前居然不知道!

测试代码: ff 显示: IE 显示: 经测试,ff 下居然replace 即使不用正则,“$&” 也表示向后全匹配!!!

无语!

 

查找资料、测试并总结如下:

一、

字符

含义

$$

$

$&

指定与整个模式匹配的 stringObj 的部分。

$`

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

$'

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

测试代码: Ie ff chrome 结果相同:

二、 ff chromereplace 不使用正则,也对上述特殊字符起作用

ie replace 不使用正则,对上述特殊字符不起作用 测试代码: ff chrome 结果: Ie 结果:

三、 由此,我们在应用replace 等正则相关函数时,是否有必要特殊处理下上述存在情况呢?
测试代码: 页面显示: 你还可以自己测试下:

 

 

比较好的做法是:

function tplReplace(str,json){
    return str.replace(/{(\w+)}/gi,function(a,b){
        return b in json ? json[b] : a;
    }
}
 


7
1
分享到:
评论
2 楼 ccc17638 2012-05-23  
     
1 楼 libmw 2010-11-08  
哎,剑光学长牛啊,刚刚在js讨论区看帖子,看着看着有个链接说正则有个问题,点开看竟然看到了个张建光……
[from:重邮人]

相关推荐

    js replace正则相关的诡异问题

    在JavaScript中,`replace()`方法是一个非常常用的字符串操作函数,用于在字符串中替换匹配到的正则表达式或特定子串。在这个问题中,开发者遇到了一个关于`replace()`方法和正则表达式特殊字符 `$` 的疑惑。 首先...

    js中string之正则表达式replace方法详解.docx

    该方法的语法为:`stringObj.replace(regexp/substr, replacement)`,其中第一个参数可以是字符串或正则表达式,第二个参数是新的替换内容,可以是字符串或函数。 replace 方法的返回值是一个新的字符串,并不改变...

    js中string之正则表达式replace方法详解

    replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法。只不过牵扯到正则的时候比较多一些。需要我们灵活的使用。 语法: stringObj.replace(regexp/substr,replacement)...

    javascript将字符串中的多个空格替换为一个空格的正则实例.docx

    要实现将字符串中的多个空格替换为一个空格的功能,我们需要使用JavaScript中的正则表达式配合`replace()`方法来完成。正则表达式可以帮助我们匹配特定模式的字符序列,而`replace()`方法则可以用来替换这些匹配到的...

    JavaScript中使用replace结合正则实现replaceAll的效果

    正常情况下,replace方法只替换字符串中的第一个匹配项,若要替换字符串中的所有匹配项,就需要用到正则表达式的全局搜索标志“g”(global)。此外,还可以结合“m”(multiLine)标志,用于指定匹配应该覆盖多行。...

    jS 正则表达式实现关键字高亮显示

    总之,利用JavaScript和正则表达式实现关键字高亮显示是一个涉及字符串处理、正则匹配和DOM操作的过程。通过创建合适的正则表达式模式,进行字符串替换,以及应用适当的CSS样式,我们可以有效地突出显示文本中的关键...

    JS常用正则表达式及其使用方法

    - **exec()**:执行一个正则表达式的搜索,找到匹配的文本,并返回一个结果数组。如果没有找到匹配,返回null。 ```javascript var regex = /\d+/; var str = "abc123def"; var match = regex.exec(str); ...

    Javascript经典正则表达式

    `String.replace()`方法用于在字符串中用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子串。其基本语法为`replace(regex, newSubStr)`。 1. **参数说明**: - `regex`:可以是字符串或正则表达式,...

    js_正则表达式全攻略

    **问题描述**:检查一个字符串是否完全由数字构成。 **解决方案**:使用正则表达式 `/^\d*$/` 进行匹配。 - `^` 表示匹配字符串的开头。 - `\d` 表示匹配任意数字。 - `*` 表示匹配前面的元素零次或多次。 - `$` ...

    MySQL中使用replace、regexp进行正则表达式替换的用法分析

    首先,replace函数是MySQL中的字符串函数,用于在字符串中查找指定的子字符串并替换为另一个字符串。replace函数的基本语法是replace(对象,搜索,替换),其中对象是要进行搜索和替换的字段,搜索是要被替换成字符串的...

    精通 JS正则表达式

    通过`RegExp`构造函数创建正则表达式时,需要提供两个参数:一个是正则表达式的文本内容,另一个是可选的标志,如`g`(全局匹配)、`i`(不区分大小写)和`m`(多行模式)。例如: ```javascript var re = new ...

    js使用正则实现ReplaceAll全部替换的方法

    在JavaScript中,字符串对象有一个replace()方法,该方法可以将指定的字符串替换为新的字符串。但replace()方法有一个限制:如果不使用正则表达式或正则表达式不包含全局匹配标志(g),那么replace()方法只会替换第...

    CSS加JS常用正则表达式

    下面我们将深入探讨CSS与JS中的正则表达式相关知识点。 一、CSS中的正则表达式 虽然CSS本身并不直接支持正则表达式,但在某些情况下,可以通过一些技巧间接使用正则。例如: 1. **CSS伪类选择器**:`:not()` 可以...

    js正则表达式资料

    12. **字符串方法**:JavaScript字符串对象的`match()`, `replace()`, `search()`和`split()`方法都可以接受正则表达式作为参数,进行相应操作。 13. **JavaScript中的正则扩展**:如`String.prototype.trim()`、`...

    【JS相关问题处理】 正则表达式解决JS取值被过滤掉引号的方法

    在本文中,我们将深入探讨如何使用正则表达式来解决在JS中取值时引号被过滤掉的问题。这个问题通常发生在从HTML元素属性、JSON数据或者服务器返回的文本中提取字符串值时,因为这些值可能被自动处理或格式化,导致...

    javascript正则表达式使用replace()替换手机号的方法.docx

    javascript正则表达式使用replace()替换手机号的方法.docx

    JavaScript经典正则表达式实战

    JavaScript正则表达式是编程语言JavaScript中的一个重要组成部分,它用于处理文本字符串,进行模式匹配、查找、替换等操作。在JavaScript中,正则表达式是一种强大的工具,可以帮助开发者实现复杂的数据验证、文本...

    JS 正则查找匹配

    JavaScript(简称JS)正则表达式是编程语言中强大的文本处理工具,用于查找、替换或者匹配字符串中的模式。在JS中,正则表达式通常与`String`对象的方法结合使用,如`match()`, `search()`, `replace()`, 和 `split...

    javascript中基于replace函数的正则表达式语法

    JavaScript中的`replace()`函数是一个非常实用的字符串方法,它允许我们根据指定的模式(通常是正则表达式)来替换字符串中的部分或全部内容。在本文中,我们将深入探讨`replace()`函数结合正则表达式的使用。 `...

Global site tag (gtag.js) - Google Analytics