第一种方法,暴力
function changeTo(str, type) {
// 转换成驼峰
if (type == 'hump') {
// 判断下划线是否存在
const index = str.indexOf('_')
// 若存在
if (index !== -1) {
const strArr = str.split('_')
let res_arr = strArr.map((item, index) => {
// 第一个不用大写
if (index !== 0) {
// 取得第一个字符串
let itemArr = item.split('')
let first = itemArr[0]
first = first.toUpperCase()
itemArr.splice(0, 1)
itemArr.unshift(first)
item = itemArr.join('')
}
return item
})
return res_arr.join('')
}
return str
} else {
// 转换成下划线
// 判断是否存在大写字母
let strArr = str.split('')
let flag = strArr.some(item => {
return item.charCodeAt() >= 65 && item.charCodeAt() <= 90
})
// 若存在
if (flag) {
let res_arr = []
// 记录大写字母的位置
let prev = 0
for (let i = 0; i < strArr.length; i++) {
// 如果是大写字母
if (strArr[i].charCodeAt() >= 65 && strArr[i].charCodeAt() <= 90) {
// 第一次找到
for (let j = prev; j < i; j++) {
if (j == prev) {
res_arr.push(strArr[j].toLowerCase())
continue
}
res_arr.push(strArr[j])
}
res_arr.push('_')
// 记录下一个大写字母的位置
prev = i
}
}
// 考虑最后一个情况
for (let i = prev; i < strArr.length; i++) {
if (i == prev) {
res_arr.push(strArr[i].toLowerCase())
continue
}
res_arr.push(strArr[i])
}
return res_arr.join('')
}
return str
}
}
第二种使用正则
function humpUnderLineConvert(str, type) {
if (type === "hump") {
const reg = /_([a-z|A-Z])/g;
return str.replace(reg, (...arg) => {
return arg[1].toUpperCase();
});
} else if (type === "underline") {
const reg = /([A-Z])/g;
return str.replace(reg, (...arg) => {
return "_" + arg[1].toLowerCase();
});
} else {
throw TypeError();
}
}