5

我已经编写了驼峰式字符串的函数(要求是在单词的开头和每个连字符之后踢出字符,这是针对个人姓名的)。

function sadCamelize(input) {
  return input.toLowerCase().replace(/([-\s])(.)/g,
    function(match, separator, starter) {
      return separator + starter.toUpperCase();
  });
}

现在,我想让我的骆驼开心,这样即使字符串的第一个字符(不接空格或连字符)也会被踢起。Id est,而不是:

HONKA-HONKA -> 洪卡-HONKA

我想得到

洪卡-洪卡 -> 洪卡-洪卡

目前我被卡住了,可能是因为烦恼。所有的骆驼都很沮丧,所以我。另外 - 我称之为悲伤/快乐骆驼(低头/仰头)的正确命名是什么?

4

3 回答 3

7
function happyCamelize(str) {
    return str.replace(/([a-z])([a-z]+)/gi, function(_, $1, $2) {
        // _: The entire matched string. not used here.
        // $1: The first group. The first alphabet.
        // $2: The second group. The rest alphabets.
        return $1.toUpperCase() + $2.toLowerCase();
    });
}

例子:

happyCamelize('HONKA-HONKA') // "Honka-Honka"

注意此代码不会更改单长字。

happyCamelize('h') // => "h"
happyCamelize('H') // => "H"

如果您还想对单长度词进行骆驼化,请使用/([a-z])([a-z]*)/gi.

于 2013-10-09T08:13:55.533 回答
4

这个丑陋的一个班轮完成了这项工作。

"HONKA-HONKA".toLowerCase().split(/\b/g).map(function(word) { return word[0].toUpperCase() + word.slice(1)}).join('')

让我爆炸一下:

"HONKA-HONKA".toLowerCase().split(/\b/g).map(function(word) {
  return word[0].toUpperCase() + word.slice(1);
}).join('');

现在包装成一个函数

function sadCamelize(str) {
    return str.toLowerCase().split(/\b/g).map(function(word) {
      return word[0].toUpperCase() + word.slice(1);
    }).join('');
}

以下是动作顺序:

  • 将所有内容转换为小写
  • 按单词分割(\b)
  • 映射正则表达式结果的每个部分,使第一个字母变为大写
  • word.slice(1) 从数组中删除第一个元素
于 2013-10-09T08:10:46.437 回答
2

您问题的第一部分已由下面的 lukas 回答,所以我将回答第二部分。

honkaHonka = camelCase

HonkaHonka = PascalCase

还有其他变体和同义词。见这里:http ://en.wikipedia.org/wiki/CamelCase#Variations_and_synonyms

于 2013-10-09T08:14:25.293 回答