Подтвердить что ты не робот

Преобразовать строку, разделенную штрих-кодом, на camelCase?

Например, предположим, что у меня всегда есть строка, которая ограничена символом "-". Есть ли способ преобразовать

он-это-пра-повседневное

к

itIsAGreatDayToday

Использование RegEx?

4b9b3361

Ответ 1

Да ( отредактировано для поддержки ввода в нижнем регистре и Unicode):

function camelCase(input) { 
    return input.toLowerCase().replace(/-(.)/g, function(match, group1) {
        return group1.toUpperCase();
    });
}

Подробнее о "замене обратных вызовов" на MDN "Указание функции как параметра" .

Первым аргументом функции обратного вызова является полное совпадение, а последующие аргументы - это скобки в регулярном выражении (в этом случае символ после дефиса).

Ответ 2

Вы можете сопоставлять символ слова после каждой тире (-) или начала строки, или вы можете упростить, сопоставляя символ слова после каждой границы слова (\b):

function camelCase(s) {
  return (s||'').toLowerCase().replace(/(\b|-)\w/g, function(m) {
    return m.toUpperCase().replace(/-/,'');
  });
}
camelCase('foo-bar'); // => 'FooBar'
camelCase('FOo-BaR-gAH'); // => 'FooBarGah'

Ответ 3

Здесь демо

var test = 'It-is-a-great-day-today';

function camelize(str) {
    return str[0].toLowerCase() + str.replace(/-([a-z])/g, function(a, b) {
        return b.toUpperCase();
    }).slice(1);
}

console.log(camelize(test));

Ответ 4

Это также должно работать:

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

И IMHO это немного более эффективно, так как мы не конвертируем всю строку ввода в нижний регистр, а затем конвертируем в верхний регистр, если это необходимо. Эта функция преобразует только первую букву в нижний регистр, а затем каждый символ после дефиса - в верхний регистр.

Ответ 5

См. http://jsfiddle.net/54ZcM/

function camelCase(string) {
    return string.toLowerCase().replace(/(\-[a-zA-Z])/g, function($1) {
        return $1.toUpperCase().replace('-','');
    })
}

alert(camelCase('fOo-BarBA-fo'));

Ответ 6

Я знаю, что этот вопрос немного стар, но

Здесь моя версия функции 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
  • строка, заканчивающаяся дефисом или подчеркиванием
  • строка с последовательными дефисами или символами подчеркивания

Здесь ссылка на живые тесты: http://jsfiddle.net/avKzf/2/

Вот результаты тестов:

  • input: "ab-cd-ef", результат: "abCdEf"
  • input: "ab-cd-ef-", result: "abCdEf"
  • input: "ab-cd-ef--", result: "abCdEf"
  • input: "ab-cd - ef--", result: "abCdEf"
  • input: "--ab-cd - ef--", result: "AbCdEf"
  • input: "-ab-cd -__- ef--", result: "AbCdEf"

Обратите внимание, что строки, начинающиеся с разделителей, приведут к заглавной букве в начале. Если это не то, что вы ожидаете, вы всегда можете использовать lcfirst. Здесь мой lcfirst, если вам это нужно:

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

Ответ 7

Это отлично работает, но кто-то может его очистить.

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'));

http://jsbin.com/yageqi/1/edit?js,console

Ответ 8

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";

Ответ 9

вот jsfiddle, с которым вы можете играть, чтобы проверить это http://jsfiddle.net/5n84w/2/

`` `

/**
 * 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;
};

`` `

Ответ 10

'it-is-a-great-day-today'.split('-').map(function(x,i){
    return (i?x[0].toUpperCase():x[0]) + x.slice(1).toLowerCase()
}).join('')

Результат:

'itIsAGreatDayToday'

В качестве альтернативы .match(/\w+/g), а не .split('-') - в зависимости от того, что вы хотите делать в таких случаях, как "this-is-a-test".

Ответ 11

Другой метод, использующий reduce:

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

Ответ 12

$scope.toCamelCase = function(arg){
    var arg = arg.toLowerCase();
    var arr = arg.split("");
    arr[0] = arr[0].toUpperCase();
    return arr.join("");
};