深入理解JavaScript-replace
replace方法是属于String对象的,可用于替换字符串。
简单介绍:
StringObject.replace(searchValue,replaceValue)
- StringObject:字符串
- searchValue:字符串或正则表达式
- replaceValue:字符串或者函数
字符串替换字符串
'I am loser!'.replace('loser','hero')//I am hero!
直接使用字符串能让自己从loser变成hero,但是如果有2个loser就不能一起变成hero了。
'I am loser,You are loser'.replace('loser','hero');//I am hero,You are loser
正则表达式替换为字符串
'I am loser,You are loser'.replace(/loser/g,'hero')//I am hero,You are hero
使用正则表达式,并将正则的global属性改为true则可以让所有loser都变为hero
有趣的替换字符
replaceValue
可以是字符串。如果字符串中有几个特定字符的话,会被转换为特定字符串。
字符 | 替换文本 |
$& | 与正则相匹配的字符串 |
$` | 匹配字符串左边的字符 |
$’ | 匹配字符串右边的字符 |
$1,$2,$,3,…,$n | 匹配结果中对应的分组匹配结果 |
使用$&字符给匹配字符加大括号
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,'{$&}');//讨论一下{正则表达式}中的replace的用法
使用$`和$’字符替换内容
'abc'.replace(/b/,"$`");//aac
'abc'.replace(/b/,"$'");//acc
使用分组匹配组合新的字符串
'nimojs@126.com'.replace(/(.+)(@)(.*)/,"$2$1")//@nimojs
replaceValue参数可以是一个函数
StringObject.replace(searchValue,replaceValue)
中的replaceValue可以是一个函数.
如果replaceValue是一个函数的话那么,这个函数的arguments会有n+3个参数(n为正则匹配到的次数)
先看例子帮助理解:
function logArguments(){
console.log(arguments);//["nimojs@126.com", "nimojs", "@", "126.com", 0, "nimojs@126.com"]
return '返回值会替换掉匹配到的目标'
}
console.log(
'nimojs@126.com'.replace(/(.+)(@)(.*)/,logArguments)
)
参数分别为
- 匹配到的字符串(此例为nimojs@126.com,推荐修改上面代码的正则来查看匹配到的字符帮助理解)
- 如果正则使用了分组匹配就为多个否则无此参数。(此例的参数就分别为
"nimojs", "@", "126.com"
。推荐修改正则为/nimo/查看控制台中返回的arguments值) - 匹配字符串的对应索引位置(此例为0)
- 原始字符串(此例为nimojs@126.com)
使用自定义函数将A-G字符串改为小写
'JAVASCRIPT'.replace(/[A-G]/g,function(){
return arguments[0].toLowerCase();
})//JaVaScRIPT
使用自定义函数做回调式替换将行内样式中的单引号删除
'<span style="font-family:\'微软雅黑\';">demo</span>'.replace(/\'[^']+\'/g,function(){
var sResult=arguments[0];
console.log(sResult);//'微软雅黑'
sResult=sResult.replace(/\'/g,'');
console.log(sResult);//微软雅黑
return sResult;
})//<span style="font-family:微软雅黑;">demo</span>
最后的小试牛刀
这一节是交给阅读者发挥的内容:
1.使用函数自主实现替换字符
字符 | 替换文本 |
$& | 与正则相匹配的字符串 |
$` | 匹配字符串左边的字符 |
$’ | 匹配字符串右边的字符 |
使用正则但不使用以上替换字符方法来实现有趣的替换字符中的三个实例。
2.洗扑克
需要将ThisNimojs-JavaScript使用正则替换成TJhaivsaNSicmroijpst
转载请注明出处:
原文链接:http://www.nimojs.com/blog/javascript-replace/
深入理解JavaScript-replace的更多相关文章
- 深入理解 JavaScript 中的 replace 方法(转)
replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符 ...
- 深入理解JavaScript系列(31):设计模式之代理模式
介绍 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 代理模式使得代理对象控制具体对象的引用.代理几乎可以是任何对 ...
- JavaScript replace() 方法+字符子集介绍(*)
重点两部分知识点 1.javascript replace()函数用法 以下replace用法转载自w3cSchool:http://www.w3school.com.cn/jsref/jsref_r ...
- 深入理解javascript原型和闭包 (转)
该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮 ...
- 深入理解JavaScript运行机制
深入理解JavaScript运行机制 前言 本文是写作在给团队新人培训之际,所以其实本文的受众是对JavaScript的运行机制不了解或了解起来有困难的小伙伴.也就是说,其实真正的原理和本文阐述的并不 ...
- 深入理解javascript系列(4):立即调用的函数表达式
本文来自汤姆大叔 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法 ...
- 深入理解javascript原型和闭包系列
从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然不至于上头条,但是也算是中规中矩,有看的人,也有评 ...
- 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- 深入理解javascript原型和闭包(1)——一切都是对象
“一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. 首先咱们还是先看看javascript中一个常用的函数——typeof().typeo ...
- 深入理解javascript原型和闭包(2)——函数和对象的关系
上文(理解javascript原型和作用域系列(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...
随机推荐
- Delphi MDI程序 父窗体如何调用当前活动子窗体的函数/过程
一个MDI文本文件编辑器打开了N个子窗体子窗体的.pas文件有一些public的过程和函数我想在父窗体调用当前活动的子窗体函数我用Self.ActiveChildForm无法调用直接frmEdit.x ...
- hive 面试题 转载
转自:http://blog.csdn.net/ningguixin/article/details/12852051 有一张很大的表:TRLOG该表大概有2T左右TRLOG:CREATE TABLE ...
- 【LeetCode】66 & 67- Plus One & Add Binary
66 - Plus One Given a non-negative number represented as an array of digits, plus one to the number. ...
- Office2013版的破解之路
追着潮流,我还是更新了我的所有软件,2013版早就下载了,因为一直破解的问题没有装,这次终于找到必成功的办法. 1.准备工作: 下载office2013的官方版即可,官方版里不包含project和vi ...
- 数往知来 ASP.NET 表单的提交_url传值_重定向 <十八>
一.表单提交时注意 如果是以get方式提交数据的时候,在接收时是用QueryString方式进行接收 如果是以post请求数据时在接收时是用Form进行接收 为什么么要这样做呢?我们用Request[ ...
- Best Practices for Speeding Up Your Web Site
The Exceptional Performance team has identified a number of best practices for making web pages fast ...
- 【boost】使用lambda表达式和generate_n生成顺序序列
程序中经常用到顺序序列(0,1,2,3,4,5,6.....),一直羡慕python有range这样的函数,而C++中通常只有用循环来处理这种初始化. 现在,结合boost库lambda(虽然差C++ ...
- 第二百三十五天 how can I 坚持
其实昨天听遗憾的,尽头看了新闻,有好多人都出去赏雪了,可惜了,最遗憾的是没有叫上你一块去. 晚上喝了点酒,抽了两根烟,以前基本不喝酒,就别提抽烟了,陈小春的<算你狠>,该如何是好. 经常在 ...
- delphi 判断调试状态
DebugHook 该变量在调试状态下值为1,运行模式为0,例如,我们可以使用如下的代码来简单控制: if DebugHook=0 then
- Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法
在web开发中,经常会用到iframe,难免会碰到需要在父窗口中使用iframe中的元素.或者在iframe框架中使用父窗口的元素 js 在父窗口中获取iframe中的元素 1. 格式:window ...