当前位置: 首页 > 后端技术 > Node.js

【今晚大吉祥礼包】003-decamelize

时间:2023-04-03 14:48:41 Node.js

简介将驼峰化的字符串转换为带有自定义分隔符的小写字符串。看介绍就知道decamelize这个包主要是用来分隔字符串的。官方例子:constdecamelize=require('decamelize');decamelize('unicornRainbow');//=>'unicorn_rainbow'decamelize('unicornRainbow','-');//=>'unicorn-rainbow'目录结构。主要代码“严格使用”;constxRegExp=require('xregexp');/***@param{string}texttext*@param{string}separator分隔符*/module.exports=(text,separator)=>{if(typeoftext!=='string'){thrownewTypeError('需要一个字符串');}separator=typeofseparator==='undefined'?'_':分隔器;constregex1=xRegExp('([\\p{Ll}\\d])(\\p{Lu})','g');constregex2=xRegExp('(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)','g');返回文本.replace(regex1,`$1${separator}$2`).replace(regex2,`$1${separator}$2`).toLowerCase();};事实上,更复杂的字符串处理需要正则化,这也不例外。作者使用了xregexp的第三方正则展开库,核心代码主要是([\p{Ll}\d])(\p{Lu})和(\p{Lu}+)(\p{Lu}[\p{Ll}\d]+)这两个句子是正则的,这两个正则句子是:(第1组:匹配小写字母)(第2组:匹配大写字母)和(第1组:匹配连续的大写letters)(group2:matchlowercaseletters)这样我们就可以理解并用group1+delimiter+group2来替换匹配的内容,从而起到分隔原字符串的作用。单元测试测试框架使用的ava,脚本省略。总结作者巧妙地利用正则组的用法简化了一个简单的分离函数,让我再次体会到正则的厉害。