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 布尔型分析
Dec 22 Javascript
js 中{},[]中括号,大括号使用详解
May 12 Javascript
javascript面向对象入门基础详细介绍
Sep 05 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
Jan 16 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
js操作cookie保存浏览记录的方法
Dec 25 Javascript
JS JSOP跨域请求实例详解
Jul 04 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
BootStrap tab选项卡使用小结
Aug 09 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
Mar 11 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
PHP类的反射用法实例
2014/11/03 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python线程池的实现实例
2013/11/18 Python
python装饰器与递归算法详解
2016/02/18 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
Python通过socketserver处理多个链接
2020/03/18 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
机电专业求职信
2014/06/14 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
创先争优宣传标语
2014/10/08 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
欢迎词怎么写
2015/01/23 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
了解Redis常见应用场景
2021/06/23 Redis
Log4j.properties配置及其使用
2021/08/02 Java/Android
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript