先看一下源码

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

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

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

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

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

还有人会说 so easy!

 '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 - #$*%':

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

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

下回再说。

jQuery 源码中的 camelCase的更多相关文章

  1. Jquery源码中的Javascript基础知识(一)

    jquery源码中涉及了大量原生js中的知识和概念,文章是我在学习两者的过程中进行的整理和总结,有不对的地方欢迎大家指正. 本文使用的jq版本为2.0.3,附上压缩和未压缩版本地址: http://a ...

  2. jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理

    jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理 最近在看jquery源码分析的视频教学,希望将视频中学到的知识用博客记录下来,更希望对有同样对jquery源码有困惑 ...

  3. jQuery源码中的“new jQuery.fn.init()”什么意思?

    所有文章搬运自我的个人主页:sheilasun.me 引子 最近打算试试看看jQuery的源码,刚开个头就卡住了.无论如何都理解不了jQuery源码入口部分中的 return new jQuery.f ...

  4. jQuery源码中的赌博网站

    前言 jQuery源码中有赌博网站? 起因是公司发的一份自查文件,某银行在日常安全运营过程中发现在部分jQuery源码中存在赌博和黄色网站链接. 链接分为好几个: www.cactussoft.cn ...

  5. Jquery源码中的Javascript基础知识(三)

    这篇主要说一下在源码中jquery对象是怎样设计实现的,下面是相关代码的简化版本: (function( window, undefined ) { // code 定义变量 jQuery = fun ...

  6. Jquery源码中的Javascript基础知识(二)

    接上一篇,jquery源码的这种写法叫做匿名函数自执行 (function( window, undefined ) { // code })( window ); 函数定义了两个参数window和u ...

  7. 关于jQuery源码中(function(window,undefined){//dosomething()})(window)写法解释

    一.首先是最常见的闭包 (Closure) 范式自执行函数的写法,这里用匿名函数封装(构造块级作用域),避免了匿名函数内部的代码与外部之间发生冲突(如使用了相同的变量名). (function() { ...

  8. jquery源码中的(function(window, undefined){})(window)【转】

    (function( window, undefined ) {})(window);这个,为什么要将window和undefined作为参数传给它? (function( $, undefined ...

  9. Jquery源码中的Javascript基础知识(四)— jQuery.fn.init方法

    $() 即调用了jQuery.fn.init方法 jQuery = function( selector, context ) { return new jQuery.fn.init( selecto ...

随机推荐

  1. C++学习笔记(1)——数据类型占空间大小

    boolean bool 1 byte   character char 1 byte May be signed or unsigned   wchar_t 1 byte     char16_t ...

  2. ECMAScript 6教程 (三) Class和Module(类和模块)

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文连接,博客地址为 http://www.cnblogs.com/jasonnode/ .该系列课程是 ...

  3. 十五、Java基础---------集合框架体系以及List

    在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...

  4. 批处理命令——set

    [1]set命令简介 set,设置. [2]set命令使用 1. 打印系统环境变量.set命令可以打印系统所有的环境变量信息. 应用示例:新建文本文件,命名为set_sys,修改文件类型为bat,用N ...

  5. python之redis

    Redis简单介绍 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构 ...

  6. python 学习笔记十一 SQLALchemy ORM(进阶篇)

    SqlAlchemy ORM SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据A ...

  7. 20个Linux服务器安全强化建议(三)

    #11.配置iptables和TCPWrappers.   iptables 是一个Linux内核提供的,运行在用户空间的程序,它允许用户配置自己的防火墙策略.我们可以使用防火墙将不必要的流量过滤出去 ...

  8. SE78、SWM0

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. 使用nodewebx进行前后端开发环境分离

    下载nodewebx(windows环境) npm install nodewebx npm install inherits 为什么要下载inherits,因为nodewebx依赖它... 构建目录 ...

  10. 初识onselectstart

    onselectstart几乎可以用于所有对象,其触发时间为目标对象被开始选中时(即选中动作刚开始,尚未实质性被选中). 实例: 在做拖拽效果的时候,为了防止js选中页面上的其他元素,onselect ...