将字符串从骆驼盒转换为蛇形盒,反之亦然

时间:2019-05-06 12:22:01

标签: javascript string algorithm typescript

我想将大写的字符串转换为带有下划线的字符串:

 - "blablaBlabla" to "blabla_blabla" 
 - "firstName" to "first_name" 

相反:

 - "blabla_blabla" to "blablaBlabla"
 - "first_Name" to "firstName"

我使用Typescript,但是我认为与Javascript没有区别。

先谢谢了。

杰里米。

4 个答案:

答案 0 :(得分:2)

您可以使用[A-Z]来获得所有大写字母,而_ + m.toLowerCase()可以得到replace匹配项

要以其他方式更改它,请将所有_([a-z])匹配以将字母分配到捕获组。然后在捕获上使用toUpperCase

function trasnform1(str) {
  return str.replace(/[A-Z]/g, (m) => '_' + m.toLowerCase())
}

function trasnform2(str) {
  return str.replace(/_([a-z])/g, (m, p1) => p1.toUpperCase())
}

console.log(trasnform1("blablaBlabla"))
console.log(trasnform1("firstName"))

console.log(trasnform2("blabla_blabla"))
console.log(trasnform2("first_name"))

答案 1 :(得分:1)

let word = "firstName";
let output = "";

// for conversion
for (let i = 0; i < word.length; i++) {
  if (word[i] === word[i].toUpperCase()) {
    output += "_" + word[i].toLowerCase();
  } else {
    output += word[i];
  }
}
console.log(output);

let source = output;
output = "";

//for reversion
for (let i = 0; i < source.length; i++) {
  if (source[i] === "_") {
    i++;
    output += source[i].toUpperCase();
  } else {
    output += source[i];
  }
}
console.log(output);

答案 2 :(得分:0)

要以特定的方式格式化字符串,您可以创建自定义的javascript函数,也可以使用this之类的库。

对于第一种情况,您可以使用函数snakeCase。 对于第二种情况,您可以使用函数pascalCase

有关更多信息,您可以直接检查上面的链接并查看所有方法。

答案 3 :(得分:0)

// Camel to snake and snake to camel case
function changeCasing(input) {
  if (!input) {
    return '';
  }
  if (input.indexOf('_') > -1) {
    const regex = new RegExp('_.', 'gm');
    return input.replace(regex, (match) => {
      const char = match.replace("_", "");
      return char.toUpperCase();
    });
  } else {
    const regex = new RegExp('[A-Z]', 'gm');
    return input.replace(regex, (match) => {
      return `_${match.toLowerCase()}`;
    });
  }
}