Как я могу преобразовать строку в регистр верблюда с помощью регулярного выражения javascript?
EquipmentClass name
or
Equipment className
or equipment class name
or Equipment Class Name
должно все стать: equipmentClassName
.
Как я могу преобразовать строку в регистр верблюда с помощью регулярного выражения javascript?
EquipmentClass name
or
Equipment className
or equipment class name
or Equipment Class Name
должно все стать: equipmentClassName
.
Глядя на ваш код, вы можете добиться этого с помощью всего двух 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();
});
}
camelize("Let's Do It!") === "let'SDoIt!"
грустное лицо. Я попробую сам, но боюсь, что просто добавлю еще одну замену.
- person Orwellophile; 19.05.2015
/(?:^\w|[A-Z]|\b\w)/
перед /\b\w/
? На мой взгляд, они выглядят одинаково (хотя второй немного попроще).
- person Motti; 10.01.2016
const toCamelCase = (str) => str.replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
- person tabrindle; 18.01.2017
.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, '');
- person bitfidget; 22.12.2017
camelize("ETA mit Männer") => "eTAMitMäNner"
- person Vincente; 05.10.2020
Если кто-то использует lodash, существует _ 1_.
_.camelCase('Foo Bar');
// → 'fooBar'
_.camelCase('--foo-bar--');
// → 'fooBar'
_.camelCase('__FOO_BAR__');
// → 'fooBar'
lodash.camelcase
вместо этого (который с тех пор устарел) 4) Вы можете уменьшить большие связка, реализовав встряхивание дерева
- person d4nyll; 19.08.2020
Я только что сделал это:
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.valueOf()
вместо передачи str
. В качестве альтернативы (как в моем случае) this.toLowerCase()
, так как мои входные строки были ВСЕМИ ЗАГЛАВНЫМИ БУКВАМИ, в которых не было должным образом переведенных в нижний регистр частей без горба. Использование только this
возвращает сам строковый объект, который на самом деле является массивом символов, отсюда и ошибка TypeError, упомянутая выше.
- person Draco18s no longer trusts SE; 24.11.2015
toCamelCase('test test') => 'testtest'
. Пожалуйста, обновите решение, добавив небольшое исправление. Первый RegExp должен быть /\s+(.)/g
.
- person Vincente; 05.10.2020
Чтобы получить c amel c 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());
}
Чтобы получить C amel S entence C ase или P ascal < strong> C 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
https://stackoverflow.com/posts/52551910/revisions
ES6, я не тестировал. Буду проверять и обновлять.
- person smilyface; 13.03.2019
.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g
- person smilyface; 09.05.2019
camalize
камализует его. Это все. Но, конечно, мы можем подумать о добавлении нового условия между ними.
- person smilyface; 30.08.2019
OneTwo
, должно быть oneTwo
. Правильно работает в моем ответе;)
- person vitaly-t; 14.01.2020
[^a-zA-Z0-9 ]
- person smilyface; 16.01.2020
Вы можете использовать это решение:
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('');
}
toCamelCase
как раз делает это.
- person ismnoiet; 04.11.2016
camelCase
и PascalCase
.
- person cchamberlain; 22.04.2017
.join('')
в конце требует места. В противном случае это хорошее решение
- person Jeff Sheffield; 07.08.2018
В конкретном случае со Скоттом я бы использовал что-то вроде:
String.prototype.toCamelCase = function() {
return this.replace(/^([A-Z])|\s(\w)/g, function(match, p1, p2, offset) {
if (p2) return p2.toUpperCase();
return p1.toLowerCase();
});
};
'EquipmentClass name'.toCamelCase() // -> equipmentClassName
'Equipment className'.toCamelCase() // -> equipmentClassName
'equipment class name'.toCamelCase() // -> equipmentClassName
'Equipment Class Name'.toCamelCase() // -> equipmentClassName
Регулярное выражение будет соответствовать первому символу, если оно начинается с заглавной буквы, и любому алфавитному символу, следующему за пробелом, то есть 2 или 3 раза в указанных строках.
Приправляя регулярное выражение до /^([A-Z])|[\s-_](\w)/g
, оно также превращает имена типов в дефис и подчеркивание.
'hyphen-name-format'.toCamelCase() // -> hyphenNameFormat
'underscore_name_format'.toCamelCase() // -> underscoreNameFormat
+
) к группе символов, то есть: /^([A-Z])|[\s-_]+(\w)/g
- person Fredric; 22.02.2017
function toCamelCase(str) {
// Lower cases the string
return str.toLowerCase()
// Replaces any - or _ characters with a space
.replace( /[-_]+/g, ' ')
// Removes any non alphanumeric characters
.replace( /[^\w\s]/g, '')
// Uppercases the first character in each group immediately following a space
// (delimited by spaces)
.replace( / (.)/g, function($1) { return $1.toUpperCase(); })
// Removes spaces
.replace( / /g, '' );
}
Я пытался найти функцию JavaScript для camelCase
строки и хотел убедиться, что специальные символы будут удалены (и мне было трудно понять, что делали некоторые из приведенных выше ответов). Это основано на ответе c c young с добавленными комментариями и удалением символов $ peci & l.
Пример надежного, высокопроизводительного:
function camelize(text) {
text = text.replace(/[-_\s.]+(.)?/g, (_, c) => c ? c.toUpperCase() : '');
return text.substr(0, 1).toLowerCase() + text.substr(1);
}
Символы, меняющие регистр:
-
_
.
Если регулярное выражение не требуется, вы можете посмотреть следующий код, который я сделал много лет назад для Twinkle:
String.prototype.toUpperCaseFirstChar = function() {
return this.substr( 0, 1 ).toUpperCase() + this.substr( 1 );
}
String.prototype.toLowerCaseFirstChar = function() {
return this.substr( 0, 1 ).toLowerCase() + this.substr( 1 );
}
String.prototype.toUpperCaseEachWord = function( delim ) {
delim = delim ? delim : ' ';
return this.split( delim ).map( function(v) { return v.toUpperCaseFirstChar() } ).join( delim );
}
String.prototype.toLowerCaseEachWord = function( delim ) {
delim = delim ? delim : ' ';
return this.split( delim ).map( function(v) { return v.toLowerCaseFirstChar() } ).join( delim );
}
Я не проводил никаких тестов производительности, и версии регулярных выражений могут быть быстрее, а могут и нет.
Мой подход ES6:
const camelCase = str => {
let string = str.toLowerCase().replace(/[^A-Za-z0-9]/g, ' ').split(' ')
.reduce((result, word) => result + capitalize(word.toLowerCase()))
return string.charAt(0).toLowerCase() + string.slice(1)
}
const capitalize = str => str.charAt(0).toUpperCase() + str.toLowerCase().slice(1)
let baz = 'foo bar'
let camel = camelCase(baz)
console.log(camel) // "fooBar"
camelCase('foo bar') // "fooBar"
camelCase('FOO BAR') // "fooBar"
camelCase('x nN foo bar') // "xNnFooBar"
camelCase('!--foo-¿?-bar--121-**%') // "fooBar121"
Вот один лайнер, выполняющий всю работу:
const camelCaseIt = string => string.toLowerCase().trim().split(/[.\-_\s]/g).reduce((string, word) => string + word[0].toUpperCase() + word.slice(1));
Он разбивает строку в нижнем регистре на основе списка символов, предоставленного в RegExp [.\-_\s]
(добавьте больше внутри []!), И возвращает массив слов. Затем он сокращает массив строк до одной конкатенированной строки слов с первыми буквами в верхнем регистре. Поскольку сокращение не имеет начального значения, первые буквы будут начинаться с верхнего регистра, начиная со второго слова.
Если вам нужен PascalCase, просто добавьте начальную пустую строку ,'')
в метод reduce.
lodash наверняка и хорошо справится с задачей:
var _ = require('lodash');
var result = _.camelCase('toto-ce héros')
// result now contains "totoCeHeros"
Хотя lodash
может быть «большой» библиотекой (~ 4 КБ), она содержит множество функций, для которых вы обычно используете сниппет или создаете сами.
Главный ответ краток, но он не касается всех крайних случаев. Для тех, кому нужна более надежная утилита без каких-либо внешних зависимостей:
function camelCase(str) {
return (str.slice(0, 1).toLowerCase() + str.slice(1))
.replace(/([-_ ]){1,}/g, ' ')
.split(/[-_ ]/)
.reduce((cur, acc) => {
return cur + acc[0].toUpperCase() + acc.substring(1);
});
}
function sepCase(str, sep = '-') {
return str
.replace(/[A-Z]/g, (letter, index) => {
const lcLet = letter.toLowerCase();
return index ? sep + lcLet : lcLet;
})
.replace(/([-_ ]){1,}/g, sep)
}
// All will return 'fooBarBaz'
console.log(camelCase('foo_bar_baz'))
console.log(camelCase('foo-bar-baz'))
console.log(camelCase('foo_bar--baz'))
console.log(camelCase('FooBar Baz'))
console.log(camelCase('FooBarBaz'))
console.log(camelCase('fooBarBaz'))
// All will return 'foo-bar-baz'
console.log(sepCase('fooBarBaz'));
console.log(sepCase('FooBarBaz'));
console.log(sepCase('foo-bar-baz'));
console.log(sepCase('foo_bar_baz'));
console.log(sepCase('foo___ bar -baz'));
console.log(sepCase('foo-bar-baz'));
// All will return 'foo__bar__baz'
console.log(sepCase('fooBarBaz', '__'));
console.log(sepCase('foo-bar-baz', '__'));
Демо здесь: https://codesandbox.io/embed/admiring-field-dnm4r?fontsize=14&hidenavigation=1&theme=dark
Потому что на этот вопрос нужен был еще один ответ ...
Я пробовал несколько предыдущих решений, и все они имели тот или иной недостаток. Некоторые не убирали пунктуацию; некоторые не занимались делами с числами; некоторые не обрабатывали несколько знаков препинания подряд.
Ни один из них не обрабатывал строку, подобную a1 2b
. Для этого случая нет явно определенного соглашения, но есть некоторые другие В вопросах stackoverflow предлагалось разделять числа знаком подчеркивания.
Я сомневаюсь, что это самый эффективный ответ (через строку проходят три регулярных выражения, а не одно или два), но он проходит все тесты, которые я могу придумать. Однако, честно говоря, я действительно не могу представить себе случай, когда вы делаете так много конверсий по принципу верблюда, что производительность будет иметь значение.
(Я добавил это как пакет npm. Он также включает необязательный логический параметр для возврата Паскаль Case вместо Camel Case.)
const underscoreRegex = /(?:[^\w\s]|_)+/g,
sandwichNumberRegex = /(\d)\s+(?=\d)/g,
camelCaseRegex = /(?:^\s*\w|\b\w|\W+)/g;
String.prototype.toCamelCase = function() {
if (/^\s*_[\s_]*$/g.test(this)) {
return '_';
}
return this.replace(underscoreRegex, ' ')
.replace(sandwichNumberRegex, '$1_')
.replace(camelCaseRegex, function(match, index) {
if (/^\W+$/.test(match)) {
return '';
}
return index == 0 ? match.trimLeft().toLowerCase() : match.toUpperCase();
});
}
Тестовые примеры (Jest)
test('Basic strings', () => {
expect(''.toCamelCase()).toBe('');
expect('A B C'.toCamelCase()).toBe('aBC');
expect('aB c'.toCamelCase()).toBe('aBC');
expect('abc def'.toCamelCase()).toBe('abcDef');
expect('abc__ _ _def'.toCamelCase()).toBe('abcDef');
expect('abc__ _ d_ e _ _fg'.toCamelCase()).toBe('abcDEFg');
});
test('Basic strings with punctuation', () => {
expect(`a'b--d -- f.h`.toCamelCase()).toBe('aBDFH');
expect(`...a...def`.toCamelCase()).toBe('aDef');
});
test('Strings with numbers', () => {
expect('12 3 4 5'.toCamelCase()).toBe('12_3_4_5');
expect('12 3 abc'.toCamelCase()).toBe('12_3Abc');
expect('ab2c'.toCamelCase()).toBe('ab2c');
expect('1abc'.toCamelCase()).toBe('1abc');
expect('1Abc'.toCamelCase()).toBe('1Abc');
expect('abc 2def'.toCamelCase()).toBe('abc2def');
expect('abc-2def'.toCamelCase()).toBe('abc2def');
expect('abc_2def'.toCamelCase()).toBe('abc2def');
expect('abc1_2def'.toCamelCase()).toBe('abc1_2def');
expect('abc1 2def'.toCamelCase()).toBe('abc1_2def');
expect('abc1 2 3def'.toCamelCase()).toBe('abc1_2_3def');
});
test('Oddball cases', () => {
expect('_'.toCamelCase()).toBe('_');
expect('__'.toCamelCase()).toBe('_');
expect('_ _'.toCamelCase()).toBe('_');
expect('\t_ _\n'.toCamelCase()).toBe('_');
expect('_a_'.toCamelCase()).toBe('a');
expect('\''.toCamelCase()).toBe('');
expect(`\tab\tcd`.toCamelCase()).toBe('abCd');
expect(`
ab\tcd\r
-_
|'ef`.toCamelCase()).toBe(`abCdEf`);
});
Эта функция пропускает cammelcase, например, эти тесты
Foo Bar
--foo-bar--
__FOO_BAR__-
foo123Bar
foo_Bar
function toCamelCase(str)
{
var arr= str.match(/[a-z]+|\d+/gi);
return arr.map((m,i)=>{
let low = m.toLowerCase();
if (i!=0){
low = low.split('').map((s,k)=>k==0?s.toUpperCase():s).join``
}
return low;
}).join``;
}
console.log(toCamelCase('Foo Bar'));
console.log(toCamelCase('--foo-bar--'));
console.log(toCamelCase('__FOO_BAR__-'));
console.log(toCamelCase('foo123Bar'));
console.log(toCamelCase('foo_Bar'));
console.log(toCamelCase('EquipmentClass name'));
console.log(toCamelCase('Equipment className'));
console.log(toCamelCase('equipment class name'));
console.log(toCamelCase('Equipment Class Name'));
немного модифицированный ответ Скотта:
toCamelCase = (string) ->
string
.replace /[\s|_|-](.)/g, ($1) -> $1.toUpperCase()
.replace /[\s|_|-]/g, ''
.replace /^(.)/, ($1) -> $1.toLowerCase()
теперь он заменяет также "-" и "_".
Все 14 перестановок ниже дают один и тот же результат «equipmentClassName».
String.prototype.toCamelCase = function() {
return this.replace(/[^a-z ]/ig, '') // Replace everything but letters and spaces.
.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, // Find non-words, uppercase letters, leading-word letters, and multiple spaces.
function(match, index) {
return +match === 0 ? "" : match[index === 0 ? 'toLowerCase' : 'toUpperCase']();
});
}
String.toCamelCase = function(str) {
return str.toCamelCase();
}
var testCases = [
"equipment class name",
"equipment class Name",
"equipment Class name",
"equipment Class Name",
"Equipment class name",
"Equipment class Name",
"Equipment Class name",
"Equipment Class Name",
"equipment className",
"equipment ClassName",
"Equipment ClassName",
"equipmentClass name",
"equipmentClass Name",
"EquipmentClass Name"
];
for (var i = 0; i < testCases.length; i++) {
console.log(testCases[i].toCamelCase());
};
вы можете использовать это решение:
String.prototype.toCamelCase = function(){
return this.replace(/\s(\w)/ig, function(all, letter){return letter.toUpperCase();})
.replace(/(^\w)/, function($1){return $1.toLowerCase()});
};
console.log('Equipment className'.toCamelCase());
Вот мое предложение:
function toCamelCase(string) {
return `${string}`
.replace(new RegExp(/[-_]+/, 'g'), ' ')
.replace(new RegExp(/[^\w\s]/, 'g'), '')
.replace(
new RegExp(/\s+(.)(\w+)/, 'g'),
($1, $2, $3) => `${$2.toUpperCase() + $3.toLowerCase()}`
)
.replace(new RegExp(/\s/, 'g'), '')
.replace(new RegExp(/\w/), s => s.toLowerCase());
}
or
String.prototype.toCamelCase = function() {
return this
.replace(new RegExp(/[-_]+/, 'g'), ' ')
.replace(new RegExp(/[^\w\s]/, 'g'), '')
.replace(
new RegExp(/\s+(.)(\w+)/, 'g'),
($1, $2, $3) => `${$2.toUpperCase() + $3.toLowerCase()}`
)
.replace(new RegExp(/\s/, 'g'), '')
.replace(new RegExp(/\w/), s => s.toLowerCase());
};
Тестовые случаи:
describe('String to camel case', function() {
it('should return a camel cased string', function() {
chai.assert.equal(toCamelCase('foo bar'), 'fooBar');
chai.assert.equal(toCamelCase('Foo Bar'), 'fooBar');
chai.assert.equal(toCamelCase('fooBar'), 'fooBar');
chai.assert.equal(toCamelCase('FooBar'), 'fooBar');
chai.assert.equal(toCamelCase('--foo-bar--'), 'fooBar');
chai.assert.equal(toCamelCase('__FOO_BAR__'), 'fooBar');
chai.assert.equal(toCamelCase('!--foo-¿?-bar--121-**%'), 'fooBar121');
});
});
Вот мое решение:
const toCamelWord = (word, idx) =>
idx === 0 ?
word.toLowerCase() :
word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
const toCamelCase = text =>
text
.split(/[_-\s]+/)
.map(toCamelWord)
.join("");
console.log(toCamelCase('User ID'))
следуя удобочитаемому подходу @ Scott, небольшая настройка
// convert any string to camelCase
var toCamelCase = function(str) {
return str.toLowerCase()
.replace( /['"]/g, '' )
.replace( /\W+/g, ' ' )
.replace( / (.)/g, function($1) { return $1.toUpperCase(); })
.replace( / /g, '' );
}
replace
, а не 4.
- person vitaly-t; 23.03.2021
Этот метод, кажется, превосходит большинство ответов здесь, хотя он немного взломан, без замен, без регулярного выражения, просто создание новой строки, которая является camelCase.
String.prototype.camelCase = function(){
var newString = '';
var lastEditedIndex;
for (var i = 0; i < this.length; i++){
if(this[i] == ' ' || this[i] == '-' || this[i] == '_'){
newString += this[i+1].toUpperCase();
lastEditedIndex = i+1;
}
else if(lastEditedIndex !== i) newString += this[i].toLowerCase();
}
return newString;
}
Это основано на ответе CMS путем удаления любых неалфавитных символов, включая подчеркивание, которое \w
не удаляет.
function toLowerCamelCase(str) {
return str.replace(/[^A-Za-z0-9]/g, ' ').replace(/^\w|[A-Z]|\b\w|\s+/g, function (match, index) {
if (+match === 0 || match === '-' || match === '.' ) {
return ""; // or if (/\s+/.test(match)) for white spaces
}
return index === 0 ? match.toLowerCase() : match.toUpperCase();
});
}
toLowerCamelCase("EquipmentClass name");
toLowerCamelCase("Equipment className");
toLowerCamelCase("equipment class name");
toLowerCamelCase("Equipment Class Name");
toLowerCamelCase("Equipment-Class-Name");
toLowerCamelCase("Equipment_Class_Name");
toLowerCamelCase("Equipment.Class.Name");
toLowerCamelCase("Equipment/Class/Name");
// All output e
Верхний регистр верблюда ("TestString") в нижний регистр верблюда ("testString") без использования регулярного выражения (давайте посмотрим правде в глаза, регулярное выражение - зло):
'TestString'.split('').reduce((t, v, k) => t + (k === 0 ? v.toLowerCase() : v), '');
В итоге я придумал более агрессивное решение:
function toCamelCase(str) {
const [first, ...acc] = str.replace(/[^\w\d]/g, ' ').split(/\s+/);
return first.toLowerCase() + acc.map(x => x.charAt(0).toUpperCase()
+ x.slice(1).toLowerCase()).join('');
}
Этот, приведенный выше, удалит все не буквенно-цифровые символы и строчные части слов, которые в противном случае остались бы в верхнем регистре, например
Size (comparative)
=> sizeComparative
GDP (official exchange rate)
=> gdpOfficialExchangeRate
hello
=> hello
Я знаю, что это старый ответ, но он обрабатывает как пробелы, так и _ (lodash)
function toCamelCase(s){
return s
.replace(/_/g, " ")
.replace(/\s(.)/g, function($1) { return $1.toUpperCase(); })
.replace(/\s/g, '')
.replace(/^(.)/, function($1) { return $1.toLowerCase(); });
}
console.log(toCamelCase("Hello world");
console.log(toCamelCase("Hello_world");
// Both print "helloWorld"
"
в .replace(/_/g", " ")
, который вызывает ошибки компиляции?
- person Crashalot; 27.09.2019
Базовый подход состоит в том, чтобы разделить строку с помощью регулярного выражения, соответствующего верхнему регистру или пробелам. Затем вы снова склеиваете кусочки. Уловка будет иметь дело с различными способами разбиения регулярных выражений в браузерах. Есть библиотека или что-то, что кто-то написал, чтобы исправить эти проблемы; Я поищу это.
вот ссылка: http://blog.stevenlevithan.com/archives/cross-browser-split
РЕДАКТИРОВАТЬ: теперь работает в IE8 без изменений.
РЕДАКТИРОВАТЬ: я был в меньшинстве в том, что такое camelCase на самом деле (нижний регистр ведущих символов по сравнению с верхним регистром). Сообщество в целом считает, что первая строчная буква - это верблюжий регистр, а ведущая заглавная - паскаль. Я создал две функции, которые используют только шаблоны регулярных выражений. :) Итак, мы используем единый словарь. Я изменил свою позицию, чтобы соответствовать большинству.
Все, что я считаю, вам нужно, это одно регулярное выражение в любом случае:
var camel = " THIS is camel case "
camel = $.trim(camel)
.replace(/[^A-Za-z]/g,' ') /* clean up non-letter characters */
.replace(/(.)/g, function(a, l) { return l.toLowerCase(); })
.replace(/(\s.)/g, function(a, l) { return l.toUpperCase(); })
.replace(/[^A-Za-z\u00C0-\u00ff]/g,'');
// Returns "thisIsCamelCase"
or
var pascal = " this IS pascal case "
pascal = $.trim(pascal)
.replace(/[^A-Za-z]/g,' ') /* clean up non-letter characters */
.replace(/(.)/g, function(a, l) { return l.toLowerCase(); })
.replace(/(^.|\s.)/g, function(a, l) { return l.toUpperCase(); })
.replace(/[^A-Za-z\u00C0-\u00ff]/g,'');
// Returns "ThisIsPascalCase"
В функциях: вы заметите, что в этих функциях замена заменяет любые символы, отличные от a-z, на пробел и пустую строку. Это необходимо для создания границ слов для использования заглавных букв. "hello-MY # world" -> "HelloMyWorld"
// remove \u00C0-\u00ff] if you do not want the extended letters like é
function toCamelCase(str) {
var retVal = '';
retVal = $.trim(str)
.replace(/[^A-Za-z]/g, ' ') /* clean up non-letter characters */
.replace(/(.)/g, function (a, l) { return l.toLowerCase(); })
.replace(/(\s.)/g, function (a, l) { return l.toUpperCase(); })
.replace(/[^A-Za-z\u00C0-\u00ff]/g, '');
return retVal
}
function toPascalCase(str) {
var retVal = '';
retVal = $.trim(str)
.replace(/[^A-Za-z]/g, ' ') /* clean up non-letter characters */
.replace(/(.)/g, function (a, l) { return l.toLowerCase(); })
.replace(/(^.|\s.)/g, function (a, l) { return l.toUpperCase(); })
.replace(/[^A-Za-z\u00C0-\u00ff]/g, '');
return retVal
}
Примечания:
Наслаждаться
Не используйте String.prototype.toCamelCase (), поскольку String.prototypes доступны только для чтения, большинство компиляторов js выдают это предупреждение.
Как и я, те, кто знает, что строка всегда будет содержать только один пробел, могут использовать более простой подход:
let name = 'test string';
let pieces = name.split(' ');
pieces = pieces.map((word, index) => word.charAt(0)[index===0 ? 'toLowerCase' :'toUpperCase']() + word.toLowerCase().slice(1));
return pieces.join('');
Хорошего дня. :)
Я придумал этот лайнер, который также работает с футляром для кебаба в CamelCase:
string.replace(/^(.)|[\s-](.)/g,
(match) =>
match[1] !== undefined
? match[1].toUpperCase()
: match[0].toUpperCase()
)
Я думаю, это должно сработать ..
function cammelCase(str){
let arr = str.split(' ');
let words = arr.filter(v=>v!='');
words.forEach((w, i)=>{
words[i] = w.replace(/\w\S*/g, function(txt){
return txt.charAt(0).toUpperCase() + txt.substr(1);
});
});
return words.join('');
}
Супер простой способ с помощью библиотеки turboCommons:
npm install turbocommons-es5
<script src="turbocommons-es5/turbocommons-es5.js"></script>
<script>
var StringUtils = org_turbocommons.StringUtils;
console.log(StringUtils.formatCase('EquipmentClass', StringUtils.FORMAT_LOWER_CAMEL_CASE));
console.log(StringUtils.formatCase('Equipment className', StringUtils.FORMAT_LOWER_CAMEL_CASE));
console.log(StringUtils.formatCase('equipment class name', StringUtils.FORMAT_LOWER_CAMEL_CASE));
console.log(StringUtils.formatCase('Equipment Class Name', StringUtils.FORMAT_LOWER_CAMEL_CASE));
</script>
Вы также можете использовать StringUtils.FORMAT_CAMEL_CASE и StringUtils.FORMAT_UPPER_CAMEL_CASE для создания вариантов регистра первой буквы.
Больше информации здесь:
Преобразовать строку в CamelCase, UpperCamelCase или нижеCamelCase