前 言
闲来无事,也学学大神,研究下Vue源码,这一研究感觉自己弱爆了,好多基础的东西都不知道,本篇文章主要为了自己记录学习,如果能让同道中人有所提高,自是最好。
javaScript中的replace方法
源码先贴出来:
/**
* Camelize a hyphen-delimited string.
*/
var camelizeRE = /-(\w)/g;
var camelize = cached(function (str) {
return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
});
看到第二个参数我直接查了一下文档,replace的语法是这样的:
stringObject.replace(regexp/substr,replacement)
stringObject
不用说,就是个字符串;
- replace方法的第一个参数分两种情况:
-
substr
(字符串); -
regexp
(正则表达式)
- replace方法的第二个参数也分两种情况:
- 字符串(常见用法,不多说);
- 函数(本篇重点):
看例子,再总结:
let str = 'my-string';
str.replace('my', (...rest) => {
console.log(...rest); // my 0 my-string
return '*';
})
// *-string
str.replace(/string/g, (...rest) => {
console.log(...rest); // string 3 my-string
return '*'
})
// my-*
/**
* 特殊情况
*/
str.replace(/-(\w)/g, (...rest) => {
console.log(...rest); // -s s 2 my-string
return '*';
})
// my*tring
如果你对上文中 rest参数 有疑惑,请移步这里。
当replace方法第二个参数为一个函数时,此时函数有三个参数,分别为匹配字符串,匹配字符串最小索引以及原字符串;
特殊情况 - 如果第一个参数是正则表达式并且正则表达式中标记了子表达式(即使用了括号),此时函数有四个参数,分别为匹配字符串,正则表达式中子表达式匹配到的字符串,匹配字符串最小索引以及原字符串。
扩 展
生性多疑的我,此时在想,如果正则表达式中标记多个子表达式时会是什么情况呢?哪位大家不是说过嘛,“实践是检验真理的唯一标准”,我们操练起来:
let str = 'my-test_String';
str.replace(/(-)(\w)/g, (...rest) => {
console.log(...rest); // -t - t 2 my-test_String
return '*';
})
// my*est_String
原来当正则表达式中标记了多个子表达式时,对应的,从第二个参数开始,函数参数依次是正则表达式每个子表达式匹配的字符串,然后是匹配字符串的最小索引,最后是原字符串。
看到这里你就会明白上面的源码其实就是把用 ‘-’ 连接的字符转为驼峰命名的形式。