连字符转小驼峰
将用连字符连接的字符转变为 小驼峰命名
function lowerCamelCase (arg, hyphen) {
let index = arg.indexOf(hyphen) // 找到连字符的索引
if (index === -1) {
return arg
}
let newStr = arg.substring(0, index) // 将索引之前的字符 加入新字符 // class
while (index !== -1) {
let upper = arg.charAt(index + 1).toUpperCase() // 将连字符之后的第一个字符转变为大写形式
newStr = newStr.concat(upper, arg.substring(index + 2)) // 将大写字符和之后的全部字符都追加入新字符串 // classLast-name
index = arg.indexOf(hyphen, index + 1) // 寻找下一个连字符的索引
if (newStr.indexOf(hyphen) !== -1) {
newStr = newStr.substring(0, newStr.indexOf(hyphen)) // 将新的字符串中的连字符之前的字符切出 // classLast
}
// 这里要加一个判断,因为当最后一个连字符之后的已经没有连字符了,所以 切除后面等于-1
}
return newStr
}
lowerCamelCase('class-last-name', '-')
// classLastName
另一种方法
function lowerCamelCase (arg, hyphen = '-') {
let arr = arg.split(hyphen) // 将字符串以连字符分隔生成数组
// 从数组的第二项开始循环,将之后的每一个数组项的首字母大写
for (let i = 1; i < arr.length; i++) {
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1)
}
return arr.join('')
}
使用正则
function lowerCamelCase (arg, hyphen = '-') {
const reg = new RegExp(hyphen + '[a-zA-Z]','g') // 因为正则中有变量,所以不能使用字面量
return arg.replace(reg, rep => rep.charAt(1).toUpperCase()) // 使用正则将连字符和紧接着的一位字母替换为该字母的大写形式
}
连字符转大驼峰
// 和小驼峰一样,正则之前把第一位拼上一个连字符就 ok 了
function UpperCamelCase(variableName, hyphen = '-') {
const reg = new RegExp(hyphen + '[a-zA-Z]','g'); // 因为正则中有变量,所以不能使用字面量
return (hyphen + variableName).replace(reg, rep => rep.charAt(1).toUpperCase());
}
小驼峰转连字符
function lowerCamelCase(variableName, hyphen = '-') {
return variableName.replace(/\B[A-Z]/g, req => hyphen + req.toLowerCase())
}
大驼峰转连字符
// 大驼峰和小驼峰的区别仅在于第一个字母,第一个字母转为小写时,不需要在前面加上连字符,因此需要加个判断
// 而在 replace 方法中正好有判断的选择项,即第二个参数值,匹配值的索引
function UpperCamelCase(variableName, hyphen = '-') {
return variableName.replace(/[A-Z]/g, (req, index) => index === 0 ? req.toLowerCase() : hyphen + req.toLowerCase())
}