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 相关文章推荐
$()JS小技巧
Jul 21 Javascript
读jQuery之六 缓存数据功能介绍
Jun 21 Javascript
js中字符替换函数String.replace()使用技巧
Aug 14 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
对frameset、frame、iframe的js操作示例代码
Aug 16 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
JS处理json日期格式化问题
Oct 01 Javascript
一个简单的node.js界面实现方法
Jun 01 Javascript
Vue2.0点击切换类名改变样式的方法
Aug 22 Javascript
详解package.json版本号规则
Aug 01 Javascript
微信小程序实现页面分享onShareAppMessage
Aug 12 Javascript
JS实现联想、自动补齐国家或地区名称的功能
Jul 07 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通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
深入php list()函数的详解
2013/06/05 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
JS与C#编码解码
2013/12/03 Javascript
js星星评分效果
2014/07/24 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
python从入门到精通(DAY 1)
2015/12/20 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
执行力心得体会
2013/12/31 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
刑事案件上诉状
2015/05/23 职场文书
会议主持人开场白台词
2015/05/28 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
js判断两个数组相等的5种方法
2022/05/06 Javascript