将任何字符串转换为驼峰式大小写

IT技术 javascript regex camelcasing
2021-01-27 08:45:24

如何使用 javascript 正则表达式将字符串转换为驼峰式大小写?

EquipmentClass nameEquipment classNameequipment class nameEquipment Class Name

都应该变成: equipmentClassName

6个回答

查看您的代码,您只需两次replace调用即可实现

function camelize(str) {
  return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
    return index === 0 ? word.toLowerCase() : word.toUpperCase();
  }).replace(/\s+/g, '');
}

camelize("EquipmentClass name");
camelize("Equipment className");
camelize("equipment class name");
camelize("Equipment Class Name");
// all output "equipmentClassName"

编辑:或者通过一次replace调用,在RegExp.

function camelize(str) {
  return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
    if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spaces
    return index === 0 ? match.toLowerCase() : match.toUpperCase();
  });
}
对于我的 ES2015+ 朋友:基于上述代码的单行。 const toCamelCase = (str) => str.replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
2021-03-20 08:45:24
虽然这不是示例所要求的案例,但您可能会看到的另一个常见输入是“设备类名称”,对此方法失败。
2021-04-04 08:45:24
@EdmundReed 您可以简单地将整个字符串转换为小写,然后再通过链接.toLowerCase()方法转换为驼峰式大小写。例如。使用上面@tabrindle 的解决方案:const toCamelCase = (str) => str.toLowerCase().replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
2021-04-07 08:45:24
很棒的代码,它最终赢得了jsperf.com/js-camelcase/5小心贡献一个可以处理(删除)非 alpha 字符的版本? camelize("Let's Do It!") === "let'SDoIt!" 悲伤的脸我会尝试自己,但担心我会添加另一个替代品。
2021-04-08 08:45:24
.. 由于非 alpha 不应该影响案例,我不确定它可以做得比return this.replace(/[^a-z ]/ig, '').replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,...更好
2021-04-11 08:45:24

如果有人使用lodash,则有一个_.camelCase()功能。

_.camelCase('Foo Bar');
// → 'fooBar'

_.camelCase('--foo-bar--');
// → 'fooBar'

_.camelCase('__FOO_BAR__');
// → 'fooBar'
@PeterMoses 1) 我的回答是“如果有人在使用 lodash”,而不是“你应该安装 Lodash 来做这个” 2) 虽然问题主体指的是 JavaScript RegEx,但很多人都在这里,因为标题是“将任何字符串转换为骆驼case” 3)您不需要导入“整个”lodash 库;你可以导入你需要的方法,或用每包的方法一样lodash.camelcase通过实施树摇动,而不是(这已经被弃用)4)您可以减轻一大捆
2021-03-22 08:45:24
@d4nyll - 很好的建议。干杯!
2021-03-25 08:45:24
为什么要为此目的安装整个 lodash 包,而 OP 特别想要一个使用 javascript regex 的解决方案。
2021-04-03 08:45:24
这个答案肯定会出现得更远。Lodash 提供了一个完整的集合来在不同情况下转换字符串。
2021-04-04 08:45:24

为了得到ç黄褐色的Ç ASE

ES5

var camalize = function camalize(str) {
    return str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, function(match, chr)
    {
        return chr.toUpperCase();
    });
}

ES6

var camalize = function camalize(str) {
    return str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase());
}


为了获得ç黄褐色的小号entence ç ASEP ASCAL Ç ASE

var camelSentence = function camelSentence(str) {
    return  (" " + str).toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, function(match, chr)
    {
        return chr.toUpperCase();
    });
}

注意:
对于那些带有口音的语言。包括À-ÖØ-öø-ÿ与正则表达式如下
.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g

这里的最佳答案 - 简洁明了。
2021-03-13 08:45:24
@Luis 添加了https://stackoverflow.com/posts/52551910/revisionsES6,我还没有测试过。我会检查和更新。
2021-03-13 08:45:24
ES6 只是为我把所有的东西都变成了小写
2021-03-21 08:45:24
2021-03-28 08:45:24
如果您传递骆驼字符串,它将不起作用。我们需要检查我们是否已经对字符串进行了camalized。
2021-04-07 08:45:24

我刚刚结束了这样做:

String.prototype.toCamelCase = function(str) {
    return str
        .replace(/\s(.)/g, function($1) { return $1.toUpperCase(); })
        .replace(/\s/g, '')
        .replace(/^(.)/, function($1) { return $1.toLowerCase(); });
}

我试图避免将多个替换语句链接在一起。我的函数中有 1 美元、2 美元、3 美元的东西。但是这种类型的分组很难理解,你提到的跨浏览器问题也是我从未想过的。

为了更好的浏览器兼容性,请使用 this 而不是 str (并从函数调用中删除参数)
2021-03-20 08:45:24
如果要使用 String.prototype,为什么不直接使用“this”而不是发送“str”参数?
2021-03-24 08:45:24
您只需要使用this.valueOf()而不是传递str. 或者(在我的情况下)this.toLowerCase()因为我的输入字符串都是大写的,没有将非驼峰部分正确小写。使用只this返回字符串对象本身,它实际上是一个字符数组,因此是上面提到的 TypeError。
2021-04-04 08:45:24
这将返回与所需完全相反的结果。这将返回 STRING。
2021-04-08 08:45:24
这对我来说看起来不错,而且就跨浏览器问题而言,没有任何可疑之处。(并不是说我是超级专家或其他任何东西。)
2021-04-12 08:45:24

您可以使用此解决方案:

function toCamelCase(str){
  return str.split(' ').map(function(word,index){
    // If it is the first word make sure to lowercase all the chars.
    if(index == 0){
      return word.toLowerCase();
    }
    // If it is not the first word only upper case the first char and lowercase the rest.
    return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
  }).join('');
}
感谢@Kody、@cchamberlain 的建设性评论,请查看更新版本。
2021-03-13 08:45:24
这是大写,不是骆驼。
2021-03-23 08:45:24
您正在考虑PascalCaseCamelCase可以是大写或小写。在这种情况下,为了避免混淆,通常使用小写。
2021-03-31 08:45:24
驼峰式大小写是大写字母中每个单词的第一个字符,toCamelCase函数就是这样做的。
2021-04-02 08:45:24
+1 表示使用正则表达式,即使问题要求使用它们的解决方案。这是一个更清晰的解决方案,也是性能的明显胜利(因为处理复杂的正则表达式比仅仅迭代一堆字符串并将它们的位连接在一起要困难得多)。请参阅jsperf.com/camel-casing-regexp-or-character-manipulation/1在这里我已经将一些示例与此示例一起使用(以及我自己对性能的适度改进,尽管我可能更喜欢这个在大多数情况下,为了清楚起见,请使用版本)。
2021-04-09 08:45:24