最近做会员个人身份页的时候遇上如下问题:
测试的昵称:jesse$<
查看代码:
看代码很快可以注意到两点:“replace
正则”和“$
”。
在js
中replace
支持正则表达式,而$
又恰好是正则向后匹配的特殊字符,很容易想到是正则引起的问题。而据我所知正则向后引用只有$1
、$2
、$3
、$4……
,而这里只有一个”$”
没有数字。
昵称“jesse$<
”在后台经html
特殊字符处理,传到前端是:“jesse$<
”,看页面结果注意到“$”
后的“&”
的也被替换了。难道是“$&”
在js
里表示正则向后引用的全匹配?
然后去掉了正则,将代码改成:
居然还是同样的结果,太诡异了!!!
更诡异的是在IE
下查看,居然是显示正确的(之前一直在ff
下测试)!
测试代码:
IE
和ff
显示相同:
经测试,“$&”
果真表示正则向后引用的全匹配,算我孤陋,之前居然不知道!
测试代码:
ff
显示:
IE
显示:
经测试,ff
下居然replace
即使不用正则,“$&”
也表示向后全匹配!!!
无语!
查找资料、测试并总结如下:
一、
字符
|
含义
|
$$
|
$
|
$&
|
指定与整个模式匹配的 stringObj
的部分。
|
$`
|
指定由 $&
描述的匹配之前的 stringObj
部分。
|
$'
|
指定由 $&
描述的匹配之后的 stringObj
部分。
|
测试代码:
Ie
、ff
和chrome
结果相同:
二、
ff
和chrome
下replace
不使用正则,也对上述特殊字符起作用
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;
}
}
分享到:
相关推荐
在JavaScript中,`replace()`方法是一个非常常用的字符串操作函数,用于在字符串中替换匹配到的正则表达式或特定子串。在这个问题中,开发者遇到了一个关于`replace()`方法和正则表达式特殊字符 `$` 的疑惑。 首先...
该方法的语法为:`stringObj.replace(regexp/substr, replacement)`,其中第一个参数可以是字符串或正则表达式,第二个参数是新的替换内容,可以是字符串或函数。 replace 方法的返回值是一个新的字符串,并不改变...
replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法。只不过牵扯到正则的时候比较多一些。需要我们灵活的使用。 语法: stringObj.replace(regexp/substr,replacement)...
要实现将字符串中的多个空格替换为一个空格的功能,我们需要使用JavaScript中的正则表达式配合`replace()`方法来完成。正则表达式可以帮助我们匹配特定模式的字符序列,而`replace()`方法则可以用来替换这些匹配到的...
正常情况下,replace方法只替换字符串中的第一个匹配项,若要替换字符串中的所有匹配项,就需要用到正则表达式的全局搜索标志“g”(global)。此外,还可以结合“m”(multiLine)标志,用于指定匹配应该覆盖多行。...
总之,利用JavaScript和正则表达式实现关键字高亮显示是一个涉及字符串处理、正则匹配和DOM操作的过程。通过创建合适的正则表达式模式,进行字符串替换,以及应用适当的CSS样式,我们可以有效地突出显示文本中的关键...
- **exec()**:执行一个正则表达式的搜索,找到匹配的文本,并返回一个结果数组。如果没有找到匹配,返回null。 ```javascript var regex = /\d+/; var str = "abc123def"; var match = regex.exec(str); ...
`String.replace()`方法用于在字符串中用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子串。其基本语法为`replace(regex, newSubStr)`。 1. **参数说明**: - `regex`:可以是字符串或正则表达式,...
**问题描述**:检查一个字符串是否完全由数字构成。 **解决方案**:使用正则表达式 `/^\d*$/` 进行匹配。 - `^` 表示匹配字符串的开头。 - `\d` 表示匹配任意数字。 - `*` 表示匹配前面的元素零次或多次。 - `$` ...
首先,replace函数是MySQL中的字符串函数,用于在字符串中查找指定的子字符串并替换为另一个字符串。replace函数的基本语法是replace(对象,搜索,替换),其中对象是要进行搜索和替换的字段,搜索是要被替换成字符串的...
通过`RegExp`构造函数创建正则表达式时,需要提供两个参数:一个是正则表达式的文本内容,另一个是可选的标志,如`g`(全局匹配)、`i`(不区分大小写)和`m`(多行模式)。例如: ```javascript var re = new ...
在JavaScript中,字符串对象有一个replace()方法,该方法可以将指定的字符串替换为新的字符串。但replace()方法有一个限制:如果不使用正则表达式或正则表达式不包含全局匹配标志(g),那么replace()方法只会替换第...
下面我们将深入探讨CSS与JS中的正则表达式相关知识点。 一、CSS中的正则表达式 虽然CSS本身并不直接支持正则表达式,但在某些情况下,可以通过一些技巧间接使用正则。例如: 1. **CSS伪类选择器**:`:not()` 可以...
12. **字符串方法**:JavaScript字符串对象的`match()`, `replace()`, `search()`和`split()`方法都可以接受正则表达式作为参数,进行相应操作。 13. **JavaScript中的正则扩展**:如`String.prototype.trim()`、`...
在本文中,我们将深入探讨如何使用正则表达式来解决在JS中取值时引号被过滤掉的问题。这个问题通常发生在从HTML元素属性、JSON数据或者服务器返回的文本中提取字符串值时,因为这些值可能被自动处理或格式化,导致...
javascript正则表达式使用replace()替换手机号的方法.docx
JavaScript正则表达式是编程语言JavaScript中的一个重要组成部分,它用于处理文本字符串,进行模式匹配、查找、替换等操作。在JavaScript中,正则表达式是一种强大的工具,可以帮助开发者实现复杂的数据验证、文本...
JavaScript(简称JS)正则表达式是编程语言中强大的文本处理工具,用于查找、替换或者匹配字符串中的模式。在JS中,正则表达式通常与`String`对象的方法结合使用,如`match()`, `search()`, `replace()`, 和 `split...
JavaScript中的`replace()`函数是一个非常实用的字符串方法,它允许我们根据指定的模式(通常是正则表达式)来替换字符串中的部分或全部内容。在本文中,我们将深入探讨`replace()`函数结合正则表达式的使用。 `...