开发者社区> zting科技> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

JavaScript 函数replace揭秘

简介:
+关注继续查看

在JavaScript中replace函数作为字符串替换函数,这是一个威力强大的字符串操作函数,对于常见字符串操作的推荐用法。这篇随笔就来更加深入的理解它。

       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 avg = a.reduce(function(obj, item){ return obj + parseFloat(item);},0) / a.length; 
var result = s.replace(/(\d+)分/g, function(){
 
            var n = parseFloat(arguments[1]);
 
            return n + "分" + "(" + ((n > avg) ? ("超出平均分" + (n - avg)) :
 
                        ("低于平均分" + (avg - n))) + "分)";
 
});
console.log(result);
复制代码

 

 

输出:

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

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


本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2013/03/14/2958720.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JavaScript的trim()方法
去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim、ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写。 下面的实现方法是用到了正则表达式,效率不错,并把这三个方法加入String对象的内置方法中去。
542 0
JavaScript replace() 方法
定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 语法 stringObject.replace(regexp,replacement) 参数 描述 regexp 必需。
583 0
深入认识javascript中的eval函数(转)
文章写得很好。 转自:http://www.enjoyphp.com/2009/05/25/javascript/js-eval/ 先来说eval的用法,内容比较简单,熟悉的可以跳过。eval函数接收一个参数s,如果s不是字符串,则直接返回s。
535 0
c#中有没有类似javascript中的eval函数?
我有五个控件       TextBox1;TextBox2;TextBox3;TextBox4;TextBox5;     我想通过循环赋值     for(int   i=0;i=4;i++)     {               .
508 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JavaScript函数
立即下载
Javascript中的函数
立即下载
Javascript中的对象
立即下载