驼峰转下划线(js)

sellerCnt => seller_cnt
minPriceOne=> min_price_one
如题,效果是上面这样的。把大写字母变成小写,然后在大写字母前加一个_怎么封装一个函数。
自己试了几次,不够完美,做一次伸手党吧。希望过审。

阅读 16.2k
5 个回答
function underline(str){
  return str.replace(/\B([A-Z])/g, '_$1').toLowerCase()
}

推荐使用 npm包 humps, 其关于这种类似的转换处理方法有很多,可以参考https://www.npmjs.com/package...
下面代码是针对题主驼峰转下划线的处理程序。

function decamelize(string, options) {
    options = options || {};
    var separator = options.separator || '_';
    var split = options.split || /(?=[A-Z])/;

    return string.split(split).join(separator).toLowerCase();
};
console.log(decamelize("sellerCnt"));    //seller_cnt
console.log(decamelize("minPriceOne"));  //min_price_one

console.log(decamelize("sellerCnt", { separator: '-' }));   // seller-cnt
console.log(decamelize("minPriceOne", { separator: '-' })); // min-price-one

一个不成熟的函数

function fn (str) {
   if (!str) {
        return str
   }
   
   return str.replace(/[A-Z]/g, (match) => {
     return `_${match.toLowerCase()}`
   })
}
formatUpper(str){
    let myStr = '';
    let myItem = ''
    for (const item of str) {
      myItem = /[A-Z]/.test(item) ? `_${item.toLowerCase()}` : item;
      myStr += myItem;
    }
    return myStr
  }

来看下这个库,开源的: name-styles
NPM 上也有:npm install name-styles

推荐问题
宣传栏