先看一下源码
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 |
假如第一个参数时 |
现在的她还可以是个函数:
变量名 | 代表的值 |
match | 匹配的子串。(对应于上述的$&。) |
p1, p2, ... |
假如replace()方法的第一个参数是一个 |
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);
其实,这只是正则表达式的沧海一粟,它就像是一本《红楼梦》,需要我们细品之!
下回再说。