zoukankan      html  css  js  c++  java
  • jQuery 源码中的 camelCase

    先看一下源码

     1 //65-72行
     2 // Matches dashed string for camelizing
     3 //匹配连字符 ‘-’ 和其后的第一个字母或数字,如果是字母,则替换为大写,如果是数字,则保留数字
     4 rdashAlpha = /-([a-z]|[0-9])/ig,
     5 //匹配 IE 中的 ‘-ms-’,替换为 ‘ms-’,这是因为 IE 中,‘-ms-’ 对应小写的 ‘ms’,而不是驼峰式的 ’Ms‘
     6 rmsPrefix = /^-ms-/,
     7 // Used by jQuery.camelCase as callback to replace()
     8 //注意函数中的参数 letter 对应的是 '([a-z]|[0-9])' 匹配的字母或数字
     9 fcamelCase = function( all, letter ) {
    10     return ( letter + '' ).toUpperCase();        
    11 },    
    12 
    13 //619-623
    14 // Convert dashed to camelCase; used by the css and data modules
    15 // Microsoft forgot to hump their vendor prefix (#9572)
    16 //转换连字符为驼峰式
    17 camelCase: function( string ) {
    18     return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
    19 },

    是不是看得有点晕啊!不要着急,有内涵的小伙伴都知道:找亮点啊!你懂的!

    大家看到 replace 没有,如果现在有一个字符串 'abc12345#$*%',要求只保留字母,你会怎么做?也许有人会说这不很简单嘛!随手拈来。

    1 'abc12345#$*%'.replace( /d{5}W{4}/, '' )

    这一看就是:当初是你要分开,分开就分开,现在又要用真爱把我哄回来,爱情不是你想卖,想买就能卖......,你和 replace 就属于穿上裤子就走人的那种。

    还有人会说 so easy!

    1 'abc12345#$*%'.replace( /([^d]*)(d*)(W*)/, '$1' );

    这是:盼望你没有为我又再渡暗中淌泪,我不想留底 你的心空虚,盼望你别再让我象背负太深的罪,我的心如水 你不必痴醉,哦 你可知谁甘心归去,你与我之间有谁,你和 replace 就属于彼此相知的情人关系。

    这个阶段的你血气方刚,偶然遇到你的初恋:

    stringObject.replace(regexp/substr,replacement)

    才发现,以前的她(replacement)只是一个字符串:

    变量名 代表的值
    $$ 插入一个 "$"。
    $& 插入匹配的子串。
    $` 插入当前匹配的子串左边的内容。
    $' 插入当前匹配的子串右边的内容。
    $n or $nn

    假如第一个参数时 RegExp对象,并且n或nn是个十进制的数字,那么插入第n个括号匹配的字符串。

    现在的她还可以是个函数:

    变量名 代表的值
    match 匹配的子串。(对应于上述的$&。)
    p1, p2, ...

    假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)

    offset

    匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是“abcd”,匹配到的子字符串时“bc”,那么这个参数将时1)

    string 被匹配的原字符串。

    (精确的参数个数依赖于replace()的第一个参数是否是一个正则表达式对象, 以及这个正则表达式中指定了多少个括号子串。)

    下面的例子将会使 'abc12345#$*%' 变成'abc - 12345 - #$*%':

    1 function replacer(match, p1, p2, p3, offset, string) {
    2   // p1:非数字, p2:数字, p3:非字母数字下划线
    3   return [p1, p2, p3].join(' - ');
    4 }
    5 var newString = 'abc12345#$*%'.replace(/([^d]*)(d*)([^w]*)/, replacer);

    其实,这只是正则表达式的沧海一粟,它就像是一本《红楼梦》,需要我们细品之!

    下回再说。


    作者:狂流
    出处:http://www.cnblogs.com/kuangliu/
    欢迎转载,分享快乐! 如果觉得这篇文章对你有用,请抖抖小手,推荐一下!

  • 相关阅读:
    jquery validate --转载
    领域驱动设计之领域模型--转载
    为system对象添加扩展方法
    DDD开源框架
    浅谈命令查询职责分离(CQRS)模式---转载
    AutoMapper小结
    执行后台任务的利器——Hangfire
    单元测试框架
    内存中的堆和栈
    ++*p,(*p)++,*p++与*++p四者的区别
  • 原文地址:https://www.cnblogs.com/kuangliu/p/4724424.html
Copyright © 2011-2022 走看看