JavaScript 函数replace深入了解


Posted in Javascript onMarch 14, 2013

replace函数接受两个参数,第一个参数为字符串或正则表达式,第一个参数同样可以接受一个字符串,还可能是一个函数。

      首先对于第一个参数为字符串的我们不再需要多说"I am a boy".replace("boy","girl"),输出:"I am a girl"。在这里想说的是第一个参数为正则的情形。对于正则表达式来说首先会根据是否全局的(全局//g)决定替换行为,如果是全部的则替换全部替换,非全局的只有替换首个匹配的字符串。例如:

"Ha Ha".replace(/\b\w+\b/g, "He")  // He He "Ha Ha".replace(/\b\w+\b/, "He")  //He Ha

1:第二个参数为字符串:

    对于正则replace约定了一个特殊标记符$:

1.$i (i:1-99) : 表示从左到右正则子表达式所匹配的文本。
2.$&:表示与正则表达式匹配的全文本。
3.$`(`:切换技能键):表示匹配字符串的左边文本。
4.$'(‘:单引号):表示匹配字符串的右边文本。
5.$$:表示$转移。
下面来几个demo:

"boy & girl".replace(/(\w+)\s*&\s*(\w+)/g,"$2 & $1") //girl & boy "boy".replace(/\w+/g,"$&-$&") // boy-boy 
"javascript".replace(/script/,"$& != $`") //javascript != java 
"javascript".replace(/java/,"$&$' is ") // javascript is script

2:第二个参数为函数:

      在ECMAScript3推荐使用函数方式,实现于JavaScript1.2.当replace方法执行的时候每次都会调用该函数,返回值作为替换的新值。

     函数参数的规定:

1.第一个参数为每次匹配的全文本($&)。
2.中间参数为子表达式匹配字符串,个数不限.( $i (i:1-99))
3.倒数第二个参数为匹配文本字符串的匹配下标位置。
4.最后一个参数表示字符串本身。
这就是本文所要说replace威力强大的地方,理论的东西都是干货,我们需要示例解决一切空洞的问题:

1:字符串首字母大写:

String.prototype.capitalize = function(){     return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); 
    } ); 
}; 
console.log("i am a boy !".capitalize())

输出:I Am A Boy !

2:对字符串“张三56分, 李四74分, 王五92分, 赵六84分”的分数提取汇总,算出平均分并输出每个人的平均分差距。

var s = "张三56分, 李四74分, 王五92分, 赵六84分"; var a = s.match(/\d+/g); 
var sum = 0; 
for(var i = 0 ; i < a.length; i++){ 
            sum += parseFloat(a[i]); 
} 
   
var avg = sum / a.length; 
   
function f(){ 
            var n = parseFloat(arguments[1]); 
            return n + "分" + "(" + ((n > avg) ? ("超出平均分" + (n - avg)) : 
                        ("低于平均分" + (avg - n))) + "分)"; 
} 
   
var result = s.replace(/(\d+)分/g, f); 
console.log(result);

输出:

张三56分(低于平均分20.5分), 李四74分(低于平均分2.5分), 王五92分(超出平均分15.5分), 赵六84分(超出平均分7.5分)

       JavaScript的replace函数再加上正则的高级应用,JavaScript的replace将会发回更大的威力所在,在这里将不再深入正则高级应用断言之类的。

出处:http://www.cnblogs.com/whitewolf/

Javascript 相关文章推荐
JavaScript中的Location地址对象
Jan 16 Javascript
js切换div css注意的细节
Dec 10 Javascript
JavaScript获取指定元素位置的方法
Apr 08 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
聊聊Vue.js的template编译的问题
Oct 09 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
Javacript中自定义的map.js  的方法
Nov 26 Javascript
Vue中的基础过渡动画及实现原理解析
Dec 04 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
小程序实现按下录音松开识别语音
Nov 22 Javascript
JavaScript 闭包的使用场景
Sep 17 Javascript
微信小程序实现日历小功能
Nov 18 Javascript
JS异常处理的一个想法(sofish)
Mar 14 #Javascript
JQuery 中几个类选择器的简单使用介绍
Mar 14 #Javascript
document.createElement()用法及注意事项(ff下不兼容)
Mar 13 #Javascript
document.createElement()用法
Mar 13 #Javascript
js获得鼠标的坐标值的方法
Mar 13 #Javascript
JavaScript将Table导出到Excel实现思路及代码
Mar 13 #Javascript
九种js弹出对话框的方法总结
Mar 12 #Javascript
You might like
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php判断变量类型常用方法
2012/04/24 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Python实现学校管理系统
2018/01/11 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
Python作用域与名字空间原理详解
2020/03/21 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
英语教研活动总结
2014/07/02 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
土地租赁协议书
2015/01/29 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书