JavaScript 实现字符串驼峰式与下划线式互相转换

简介: JavaScript 实现字符串驼峰式与下划线式互相转换

方法一:正则表达式 (推荐)

/*
* 下划线转换驼峰
*/ 
function underlineToHump(str) {
  // 如果首字母是_,执行 replace 时会多一个_,这里需要去掉
  if(str.slice(0,1) === '_'){ 
    str = str.slice(1);
  }
  return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {
    return $1 + $2.toUpperCase();
  });
}
/*
* 驼峰转换下划线
*/ 
function humpToUnderline(str) {
  let temp = str.replace(/[A-Z]/g, function (match) { 
      return "_" + match.toLowerCase();
    });
    // 如果首字母是大写,执行replace时会多一个_,这里需要去掉
    if(temp.slice(0,1) === '_'){ 
      temp = temp.slice(1);
    }
  return temp;
}
console.log(underlineToHump('a_b2_23_c23'),underlineToHump('_test_to_lower_line')); // aB223C23  testToLowerLine
console.log(humpToUnderline('userNameInfo'),humpToUnderline('TestToLowerLine'));//user_name_info test_to_lower_line

方法二:利用数组的 reduce 方法实现

/*
* 下划线转换驼峰
*/ 
function doCamel(preVal, curVal, curIndex, arr){
  if(curVal === '_'){
    curVal = arr[curIndex + 1];
    arr.splice(curIndex + 1, 1)
    return preVal + curVal.toUpperCase();
  }else{
    return preVal + curVal;
  }
}
function underlineToHump(str) {
  if(typeof str === 'string' && str.length){
    str = str.split('');
    // 如果首字母是_,执行 replace 时会多一个_,这里需要去掉
    const fir = str.slice(0,1)[0];
    if(fir === '_'){ 
      str = str.slice(1);
    }
    return str.reduce(doCamel);
  }
}
/*
* 驼峰转换下划线
*/ 
function doUnderline(preVal, curVal, curIndex, array){
  if(/[A-Z]/.test(curVal)){
    curVal = curVal.toLowerCase();
    if(curIndex === 0){
      return preVal + curVal;
    }else{
      return preVal + '_' + curVal;
    }
  }else{
    return preVal + curVal;
  }
}
function humpToUnderline(str) {
  if(typeof str === 'string'){
    str = str.split('');
  }
  return str.reduce(doUnderline,'');
}
console.log(underlineToHump('a_b2_23_c23'),underlineToHump('_test_to_lower_line'));// aB223C23   testToLowerLine
console.log(humpToUnderline('userNameInfo'),humpToUnderline('TestToLowerLine'));//user_name_info test_to_lower_line

方法三:利用数组的 map 方法实现

/*
* 下划线转换驼峰
*/ 
function doHump(val,index,arr){
  if(val === '_'){
    val = arr[index + 1];
    arr.splice(index + 1, 1)
    return val.toUpperCase();
  }else{
    return val;
  }
}
function underlineToHump(str) {
  if(typeof str === 'string' && str.length){
    str = str.split('');
    // 如果首字母是_,执行 replace 时会多一个_,这里需要去掉
    const fir = str.slice(0,1)[0];
    if(fir === '_'){ 
      str = str.slice(1);
    }
    return [].map.call(str,doHump).join('');
  }
}
/*
* 驼峰转换下划线
*/ 
function doUnderline(val,index,arr){
  if(/[A-Z]/.test(val)){
    if(index === 0){
      return val.toLowerCase();
    }else{
      return '_' + val.toLowerCase();
    }
  }else{
    return val;
  }
}
function humpToUnderline(str) {
  if(typeof str === 'string'){
    return [].map.call(str,doUnderline).join('');
    // Array.prototype.map.call(arr, doLowerLine).join('');
  }
}
console.log(underlineToHump('a_b2_23_c23'),underlineToHump('_test_to_lower_line'));//aB223C23    testToLowerLine
console.log(humpToUnderline('userNameInfo'),humpToUnderline('TestToLowerLine'));//user_name_info test_to_lower_line


相关文章
|
1月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
|
1月前
|
JavaScript 前端开发
js字符串替换
js字符串替换
16 2
|
3月前
|
JavaScript 前端开发
javascript 如何判断字符串日期是否相差七天
在JavaScript中,你可以使用`Date`对象来比较两个日期之间的差异。下面是一个简单的示例,演示如何判断两个字符串日期是否相差七天: ```javascript function isSevenDaysDifference(date1, date2) { // 确保输入是字符串 if (typeof date1 !== 'string' || typeof date2 !== 'string') { return false; } // 将字符串转换为Date对象 var d1 = new Date(date1);
|
3月前
|
JavaScript 数据安全/隐私保护 Android开发
Js随机生成字符串---autojs pro 篇
Js随机生成字符串---autojs pro 篇
28 0
|
15天前
|
JavaScript 前端开发 索引
JavaScript中与字符串相关的方法
JavaScript中与字符串相关的方法
|
1月前
|
JavaScript 前端开发 索引
JavaScript字符串检查:从基础到高级
【2月更文挑战第26天】
26 0
JavaScript字符串检查:从基础到高级
|
8天前
|
JavaScript 前端开发
js字符串拼接
js字符串拼接
|
15天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`'1.2,2,3,4,5'`)转换为对象数组。通过使用`split(',')`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
19天前
|
JavaScript
JS去除字符串的方法
JS去除字符串的方法
|
23天前
|
JavaScript 前端开发
为 setTimeout 或 setInterval 提供一个字符串作为第一个参数(js的问题)
为 setTimeout 或 setInterval 提供一个字符串作为第一个参数(js的问题)
10 0