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 Event学习第十一章 按键的检测
Feb 10 Javascript
iScroll中事件点击触发两次解决方案
Mar 11 Javascript
基于jquery实现的鼠标悬停提示案例
Dec 11 Javascript
javascript自执行函数
Feb 10 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 Javascript
vue webpack实用技巧总结
Apr 24 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
angular的输入和输出的使用方法
Sep 22 Javascript
vue-router跳转时打开新页面的两种方法
Jul 29 Javascript
解决vue.js提交数组时出现数组下标的问题
Nov 05 Javascript
vue中监听路由参数的变化及方法
Dec 06 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 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
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python验证码识别的方法
2015/07/10 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
python之PyMongo使用总结
2017/05/26 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
社区志愿者心得体会
2014/01/03 职场文书
九年级化学教学反思
2014/01/28 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
意向协议书
2015/01/27 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
工会文体活动总结
2015/05/07 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
Python实现学生管理系统(面向对象版)
2021/06/24 Python