Как преобразовать строку с верблюжьим регистром в тире в JavaScript?

Я хочу преобразовать эти строки:

fooBar
FooBar

в:

foo-bar
-foo-bar

Как бы я сделал это в JavaScript наиболее элегантным и производительным способом для любой строки?

8 ответов

Решение

Ты можешь использовать replace с регулярным выражением вроде:

let dashed = camel.replace(/[A-Z]/g, m => "-" + m.toLowerCase());

которая соответствует всем заглавным буквам и заменяет их версиями в нижнем регистре, перед которыми стоит "-",

Пример:

console.log("fooBar".replace(/[A-Z]/g, m => "-" + m.toLowerCase()));
console.log("FooBar".replace(/[A-Z]/g, m => "-" + m.toLowerCase()));

Для тех, кому не нужен предшествующий дефис:

Может ты мог бы использовать kebabCaseиз lodash: https://lodash.com/docs/4.17.15

Ты можешь использовать replace() с регулярным выражением Тогда используйте toLowerCase()

let camel = (s) => s.replace(/[A-Z]/g, '-$&').toLowerCase()

console.log(camel('fooBar'))
console.log(camel('FooBar'))

`

Вы можете использовать https://github.com/epeli/underscore.string из библиотеки underscore.string.

Ты можешь использовать

const makeItDashed = camelCased => {
   let dashed = ``
   camelCased.split(``).map(ch => {{dashed += ch.toUpperCase() == ch ? `-${ch.toLowerCase()}` : ch}})
   return dashed
}

console.log(makeItDashed(`fooBar`))
console.log(makeItDashed(`FooBar`))

Если вам нужен простой способ сделать это, вы можете использовать CaseParser .

Все, что вам нужно сделать, это установить пакет в ваш проект:

      npm add caseparser

А затем используйте его, как в следующем примере. Если вы передадите строку «fooBar», вы можете преобразовать ее во множество «случаев»:

      // import using ESM
import caseparser from 'caseparser';
// or using CommonJS
const caseparser = require('caseparser');

// Using CaseParser library
caseparser.camelToDash('fooBar');       // 'foo-bar'
caseparser.camelToPascal('fooBar');     // 'FooBar'
caseparser.camelToSnake('fooBar');      // 'foo_bar'
caseparser.camelToUpperDash('fooBar');  // 'FOO-BAR'
caseparser.camelToUpperSnake('fooBar'); // 'FOO_BAR'

Он также преобразует ключи и массивы объектов json. В последних версиях (2.xx) теперь поддерживается типобезопасность после преобразования!

Надеюсь помочь вам :)

РЕДАКТИРОВАТЬ

Простой случай:

"fooBar".replace( /([a-z])([A-Z])/g, '$1-$2' ).toLowerCase();   
"FooBar".replace( /([a-z])([A-Z])/g, '$1-$2' ).toLowerCase();

Крайний случай: это может привести к крайнему случаю, когда у вас есть один символ.

"FooBarAFooBar".replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`)
Другие вопросы по тегам