JavaScript replace 方法

一到面试题引起的好奇:

  12000000.11 如何将浮点数小数点左边的数每三位加一个逗号,如12,000,000.11?

  

function commafy(num){
  return num && num.toString().replace(/(\d)(?=(\d{3})+\.)/g, function($1, $2){
    return $2 + ',';
  });
}

  关于replace方法:

  注:看正则表达式的匹配模式:全局匹配(//g)和非全局匹配(只替换首个匹配的字符串)

  第一种情况:第二个参数为字符串

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

   1. $i( i: 1-99 ):表示从左到右正则表达式所匹配的文本,

    e.g.1  "Baude & Lee".replace(/(\w+)\s*&\s*(\w+)/g, "$2 ^ $1"); // output: Lee ^ Baude

    在"$2 ^ $1"中,使用该模式替换正则表达所匹配的全字符串。

    e.g.2 "Baude & Lee   test".replace(/(\w+)\s*&\s*(\w+)/g, "$2 ^ $1"); // output: Lee ^ Baude  test

    在上面例子e.g.2中,output输出的结果是正则表达式所能匹配的部分被"$2 ^ $1"表达式替换成功后的字符串,再加上原字符串"  test".

  2. $& : 有人说“表示与正则表达式匹配的全文本”,还有其他说法,但是我自己运行代码发现,它与stringObject是相等的

    e.g.3, "Baude & Lee  test".replace(/(\w+)\s*&\s*(\w+)/g, "$2 ^ $1"); // $& 输出的是"Baude & Lee  test"(具体情况如何请自行测试)

  3. $` : 请自行测试,不要轻易相信他人的说法有可能,你会得出意想不到的结果

  4. $' : 请自行测试,不要轻易相信他人的说法有可能,你会得出意想不到的结果

  第二个参数为函数:

  注:当replace方法执行的时候每次都会调用该函数,返回值作为替换的数值

  

1 function capitialize(str){
2   return str.replace(/(^|\s)([a-z])/g, function($1, $2, $3){
3     return $2+$3.toUpperCase();
4   });
5 }
6 console.log(capitialize("i am a boy, not a girl!"));// I Am A Boy, Not A Girl

 

 

 

  以下对于函数参数(replace(regexp, function($1,$2,$3){}))的解释,来自摘抄(最好自行检测,不要轻易相信他人):

  1. 第一个参数为每次匹配的全文本( $& )。(个人觉得这个说法还是比较通俗易懂,不像某些文档,不知所云)

  2. 中间参数为子表达式匹配字符串,个数不限($i(i: 1-99))。

    有些同学可能对于$1,$2,$3, ...不是很理解。我来表述一下自己的理解(注意不一定正确):在正则表达式中,比如(/(^|\s)([a-z])/g)中$2==(^|\s), $3==([a-z]),大概是这个样子进行匹配的。

    上述例子中,每成功匹配一次(比如第一次成功匹配 i,都会通过Function的return值替换掉匹配成功的字符或字符串)。

   3. 倒数第二个参数表示匹配文本字符串的成功的位置的下标(可以自行打印输出查看结果)

  4. 最后一个参数表示字符串本身。

 相关链接:

  1. https://msdn.microsoft.com/zh-cn/library/9dthzd08%28v=vs.94%29.aspx?f=255&MSPPError=-2147217396

  2. https://msdn.microsoft.com/zh-cn/library/t0kbytzc(v=vs.94).aspx

  3. https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

  4. http://www.w3school.com.cn/jsref/jsref_replace.asp

  5. http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

    如有错误,欢迎指正和讨论☺!

转载于:https://www.cnblogs.com/Baude-Lee20150915Create/p/8029735.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值