下划线与驼峰式字符串转换器

第一种方法,暴力

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();
  }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值