classify 函数

const classifyRE = /(?:^|[-_])(\w)/g
const classify = str => str
  .replace(classifyRE, c => c.toUpperCase())
  .replace(/[-_]/g, '')

在顶级作用域下,初始化变量 classifyRE,值为一个正则表达式。这个正则表达式使用了 g 修饰符:“全局匹配,而不是找到第一个匹配项后就停止”。以一个非捕获括号开头:(?:x)classifyRE 其实也就是寻找一个输入的开始(没有捕获),或者是一个连字符,或者是一个下划线(没有捕获):^|[-_]。接下来是一个单词字符( 捕获):(\w)

然后,定义一个函数变量 classify,参数是一个字符串,返回值是参数 str 两次链式调用 replace 方法

replace 方法搜索指定的值,或一个字符串的正则表达式,并返回其中指定的值置换后的新字符串。

在这里,第一个 replace 方法再 str 字符搜索,以找到符合 classifyRE (正则表达式)的字符,替换它的是一个函数的返回值,参数 c 是匹配到 classifyRE 的字符,.toUpperCase() 返回的是字符的全部大写形式。替换匹配项为这是函数的返回值。:

replace(classifyRE, c => c.toUpperCase())

第二个 replace 方法全局搜索连字符和下划线,替换为空字符串:

replace(/[-_]/g, '')

总结下这篇文章里我们所学习的,classify 函数接收一个字符串作为参数,寻找符合下列条件的字符:

  • 在字符串的开头
  • 在连接符 - 之后
  • 或者在下划线 _ 之后

替换为一个大写字母,然后移除连接符和下划线。例如,“this_is-an_example” 将会替换为 “ThisIsAnExample”。

基于此,我们最后将回到 warn 函数中,这个函数在本系列的第十一章(接着是 generateComponentTrace 函数,repeat formatComponentName 函数,和现在的 classify 函数)里学习过。下一章我们将继续回到 warn 函数的学习中。

上次更新: 2/12/2019, 3:22:54 AM