Javascript 是否将破折号分隔字符串转换为camelCase?

Javascript 是否将破折号分隔字符串转换为camelCase?,javascript,regex,Javascript,Regex,例如,假设我总是有一个以“-”分隔的字符串。有办法改变吗 今天是美好的一天 到 今天天气很好 使用RegEx?是(编辑的支持非小写输入和Unicode): 请参阅MDN文档中有关“替换回调”的更多信息 回调函数的第一个参数是完全匹配,随后的参数是正则表达式中带括号的组(在本例中,是连字符后面的字符)。 您可以在每个破折号(-)后面或字符串开头匹配单词字符,也可以通过在每个单词边界(\b)后面匹配单词字符来简化: 功能案例{ 返回(s | |“”).toLowerCase().replace(/(

例如,假设我总是有一个以“-”分隔的字符串。有办法改变吗

今天是美好的一天

今天天气很好

使用RegEx?

是(编辑的支持非小写输入和Unicode):

请参阅MDN文档中有关“替换回调”的更多信息

回调函数的第一个参数是完全匹配,随后的参数是正则表达式中带括号的组(在本例中,是连字符后面的字符)。


您可以在每个破折号(
-
)后面或字符串开头匹配单词字符,也可以通过在每个单词边界(
\b
)后面匹配单词字符来简化:

功能案例{
返回(s | |“”).toLowerCase().replace(/(\b |-)\w/g,函数(m){
返回m.toUpperCase()。替换(/-/,'');
});
}
camelCase('foo-bar');//=>'FooBar'
camelCase('FOo-BaR-gAH');//=>'福巴加'
请参见

这也应该起作用:

function camelCase(str) {
  return str.replace(/^.|-./g, function(letter, index) {
    return index == 0 ? letter.toLowerCase() : letter.substr(1).toUpperCase();
  });
}

因为我们并没有先将整个输入字符串转换成小写,然后在需要时再转换成大写,所以它的效率要高一点。此函数仅将第一个字母转换为小写,然后将连字符后的每个字符转换为大写。

我知道这个问题有点老,但是

以下是我的camelCase函数版本:

var camelCase = (function () {
    var DEFAULT_REGEX = /[-_]+(.)?/g;

    function toUpper(match, group1) {
        return group1 ? group1.toUpperCase() : '';
    }
    return function (str, delimiters) {
        return str.replace(delimiters ? new RegExp('[' + delimiters + ']+(.)?', 'g') : DEFAULT_REGEX, toUpper);
    };
})();
它处理以下所有边缘情况:

  • 默认情况下同时处理下划线和连字符(可通过第二个参数配置)
  • 使用unicode字符的字符串
  • 以连字符或下划线结尾的字符串
  • 具有连续连字符或下划线的字符串
以下是指向实时测试的链接:

以下是测试结果:

  • 输入:“ab cd ef”,结果:“abCdEf”
  • 输入:“ab cd ef-”,结果:“abCdEf”
  • 输入:“ab cd ef--”,结果:“abCdEf”
  • 输入:“ABCD--ef--”,结果:“abCdEf”
  • 输入:“--ab cd--ef--”,结果:“AbCdEf”
  • 输入:“--ab cd-_uUEF-”,结果:“AbCdEf”
请注意,以分隔符开头的字符串将在开头产生大写字母。 如果这不是您所期望的,那么您始终可以首先使用LCP。 如果您需要的话,这是我的第一个:

function lcfirst(str) {
    return str && str.charAt(0).toLowerCase() + str.substring(1);
}

这是可以用来测试的JSFIDLE

```

```

结果:

'itIsAGreatDayToday'

或者,
.match(/\w+/g)
而不是
.split(“-”)
——这取决于您在诸如“this--is-a-test”这样的边缘情况下要执行的操作。

这非常有效,但可能有人能够清理它

var toCamelCase = function(str) {
        // Replace special characters with a space
        str = str.replace(/[^a-zA-Z0-9 ]/g, " ");
        // put a space before an uppercase letter
        str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');
        // Lower case first character and some other stuff that I don't understand
        str = str.replace(/([^a-zA-Z0-9 ])|^[0-9]+/g, '').trim().toLowerCase();
        // uppercase characters preceded by a space or number
        str = str.replace(/([ 0-9]+)([a-zA-Z])/g, function(a,b,c) {
            return b.trim() + c.toUpperCase();
        });
        return str;
};

console.log(toCamelCase('hyphen~name~ format'));
console.log(toCamelCase('hyphen.name.format'));
console.log(toCamelCase('hyphen-name-format'));
console.log(toCamelCase('Hyphen-Dame-Gormat'));
console.log(toCamelCase('EquipmentClass name'));
console.log(toCamelCase('Equipment className'));
console.log(toCamelCase('equipment class name'));
console.log(toCamelCase(' e    Equipment Class Name'));
console.log(toCamelCase('under9score_name_format'));
console.log(toCamelCase('Enderscore_name_format'));
console.log(toCamelCase('EnderscoreBameFormat'));
console.log(toCamelCase('_EnderscoreBameFormat'));
另一种方法使用:

最好这样,伙计们

功能用例(数据){
var-tmp;
if(数据类型和数据类型==='object'){
forEach(数据、函数(值、键){
var tmpvalue=camelCase(关键);
tmp[tmpvalue]=值;
});
返回tmp;
}否则{
replace(/(\-\w)/g,函数(m){return m[1].toUpperCase()})。replace(/(\-\w)/g,函数(m){return m[1].toUpperCase();});
}
}

console.log(camelCase(“成功”\u dfds\u dsqsdqs-dsdqs-dqsdqs”)提示:在JavaScript中,函数可以作为“替换”参数提供。此函数将针对每个匹配(在“全局匹配”模式下运行)进行求值,并且可能包含任意代码。这里的含义似乎有些混淆。记住正则表达式是非常特殊的;考虑这些输入(以及输出应该是什么):<代码> FooBar ,<代码> FooBar ,<代码> FooBar < /C>,<代码> FooBar ,<代码> -Fo-Bar < /代码>等。尽管它在
politische-konomie
上失败,因为
\w
不支持Unicode。JavaScript ReGEXP也不支持<代码> \ {{No.} /代码>或<代码> \pEng/},因此,如果您希望它正常工作,则应考虑使用<代码> /-/(.)/g < /C>作为正则表达式。@霍布斯将以字幕结尾(<代码> FooBar < /代码>)。正则表达式的一个特点是。。。非常精确。(实际上,从维基的定义来看,
FooBar
FooBar
都可以被认为是camelCase/camelCase…)@hobbs:有趣的一点。使用
而不是
\w
并不会造成任何伤害(我认为),因为非字母不会受到
toUpperCase
的影响。已编辑。不过,这不会出现在
Foo Bar
上。@apsillers我不是在开玩笑。是的,它明确要求
使用正则表达式将字符串转换为camelCase?
(请参阅)感谢链接;我一直认为这是一个很好的例子。。。但我想CamelCase也会这么说……这根本不起作用。这是大写字母,而不是驼峰大小写。这只是大写第一个字母,不是驼峰大小写。比所有基于正则表达式的实现快得多。如果您首先拥有结构良好的字符串,并且需要快速(例如转换多个键),那么这非常有用。。。如果您从一个人那里获得的数据可能很混乱,请使用像lodash中那样的正则表达式实现。不需要匹配a-Z,因为您已经用string.toLowerCase()将字符串小写
function lcfirst(str) {
    return str && str.charAt(0).toLowerCase() + str.substring(1);
}
/**
 * Function to convert any string to camelCase
 * var regex = 'chetan-Ankola###.com---m13ok#-#alo(*finding!R%S#%-GFF'; 
 * Where [-_ .] is the seperator, you can add eg: '@' too
 * + is to handle repetition of seperator           
 * ? is to take care of preceeding token 
 * match nov(ember)? matches nov and november
 */
var camelCaser = function (str) {
    var camelCased = str.replace(/[-_ .]+(.)?/g, function (match, p) {
        if (p) {
            return p.toUpperCase();
        }
        return '';
    }).replace(/[^\w]/gi, '');
    return camelCased;
};
'it-is-a-great-day-today'.split('-').map(function(x,i){
    return (i?x[0].toUpperCase():x[0]) + x.slice(1).toLowerCase()
}).join('')
'itIsAGreatDayToday'
$scope.toCamelCase = function(arg){
    var arg = arg.toLowerCase();
    var arr = arg.split("");
    arr[0] = arr[0].toUpperCase();
    return arr.join("");
};
var toCamelCase = function(str) {
        // Replace special characters with a space
        str = str.replace(/[^a-zA-Z0-9 ]/g, " ");
        // put a space before an uppercase letter
        str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');
        // Lower case first character and some other stuff that I don't understand
        str = str.replace(/([^a-zA-Z0-9 ])|^[0-9]+/g, '').trim().toLowerCase();
        // uppercase characters preceded by a space or number
        str = str.replace(/([ 0-9]+)([a-zA-Z])/g, function(a,b,c) {
            return b.trim() + c.toUpperCase();
        });
        return str;
};

console.log(toCamelCase('hyphen~name~ format'));
console.log(toCamelCase('hyphen.name.format'));
console.log(toCamelCase('hyphen-name-format'));
console.log(toCamelCase('Hyphen-Dame-Gormat'));
console.log(toCamelCase('EquipmentClass name'));
console.log(toCamelCase('Equipment className'));
console.log(toCamelCase('equipment class name'));
console.log(toCamelCase(' e    Equipment Class Name'));
console.log(toCamelCase('under9score_name_format'));
console.log(toCamelCase('Enderscore_name_format'));
console.log(toCamelCase('EnderscoreBameFormat'));
console.log(toCamelCase('_EnderscoreBameFormat'));
var string = "it-is-a-great-day-today";
or
var string = "it_is_a_great_day_today";

var regex = /(_|-)([a-z])/g;

string.toLowerCase().replace(regex, toCamelCase );

function toCamelCase( string ){
  return string[1].toUpperCase();
}

Output: "itIsAGreatDayToday";
function camelCase(str) {
  return str
    .split('-')
    .reduce((a, b) => a + b.charAt(0).toUpperCase() + b.slice(1));
}