Как преобразовать строку с верблюжьим регистром в тире в 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()}`)