Как я могу преобразовать строку в случай верблюда, используя регулярное выражение javascript?
EquipmentClass name
или
Equipment className
или equipment class name
илиEquipment Class Name
все должны стать: equipmentClassName
.
javascript
regex
camelcasing
Скотт Кларенбах
источник
источник
Ответы:
Глядя на свой код, вы можете достичь его всего двумя
replace
вызовами:Изменить: Или в один
replace
вызов, захват пробелов также вRegExp
.источник
camelize("Let's Do It!") === "let'SDoIt!"
печальное лицо . Я попробую себя, но боюсь, я просто добавлю другую замену.return this.replace(/[^a-z ]/ig, '').replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,
...const toCamelCase = (str) => str.replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
.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, '');
Если кто-то использует lodash , есть
_.camelCase()
функция.источник
Я только что закончил делать это:
Я пытался избежать объединения нескольких операторов замены. Что-то, где у меня было бы $ 1, $ 2, $ 3 в моей функции. Но такой тип группирования трудно понять, и о вашем упоминании о кросс-браузерных проблемах я тоже никогда не задумывался.
источник
this.valueOf()
вместо прохожденияstr
. В качестве альтернативы (как в моем случае),this.toLowerCase()
поскольку мои входные строки были во ВСЕХ CAPS, в которых не горбатые части были должным образом опущены. Использование justthis
возвращает сам строковый объект, который на самом деле является массивом char, отсюда и TypeError, упомянутый выше.Вы можете использовать это решение:
источник
toCamelCase
функция просто делает это.ES5
ES6
Примечание:
для тех, кто говорит с акцентом. Включать
À-ÖØ-öø-ÿ
в регулярное выражение следующее.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g
источник
https://stackoverflow.com/posts/52551910/revisions
ES6, я не тестировал его. Я проверю и обновлю.В конкретном случае Скотта я бы пошел с чем-то вроде:
Регулярное выражение будет соответствовать первому символу, если оно начинается с заглавной буквы, и любому буквенному символу после пробела, то есть 2 или 3 раза в указанных строках.
Приправив регулярное выражение к
/^([A-Z])|[\s-_](\w)/g
нему, вы верблюдаете дефис и подчеркиваете имена типов.источник
+
) в группу символов, а именно:/^([A-Z])|[\s-_]+(\w)/g
Я пытался найти функцию JavaScript для
camelCase
строки и хотел убедиться, что специальные символы будут удалены (и мне было трудно понять, что делали некоторые из приведенных выше ответов). Это основано на ответе cc young, с добавленными комментариями и удалением символов $ peci & l.источник
Надежный, рабочий пример, который я использовал годами:
Изменяющие регистр символы:
-
_
.
источник
Если регулярное выражение не требуется, возможно, вы захотите взглянуть на следующий код, который я сделал давно для Twinkle :
Я не делал никаких тестов производительности, и версии регулярных выражений могут быть или не быть быстрее.
источник
Мой подход ES6 :
источник
источник
Lodash может сделать свое дело уверенно и хорошо:
Хотя это
lodash
может быть «большая» библиотека (~ 4 КБ), она содержит множество функций, для которых вы обычно используете фрагмент кода или создаете сами.источник
Вот один лайнер, выполняющий работу:
Он разбивает строку в нижнем регистре на основе списка символов, предоставленного в RegExp
[.\-_\s]
(добавьте больше в []!), И возвращает массив слов. Затем он сокращает массив строк до одной объединенной строки слов с прописными первыми буквами. Поскольку сокращение не имеет начального значения, оно начнёт с заглавных букв первые буквы, начинающиеся со второго слова.Если вы хотите PascalCase, просто добавьте начальную пустую строку
,'')
в метод Reduce.источник
после читабельного подхода @ Скотта, немного тонкой настройки
источник
немного измененный ответ Скотта:
теперь он заменяет '-' и '_' тоже.
источник
Все 14 приведенных ниже перестановок дают одинаковый результат «equipmentClassName».
источник
Вы можете использовать это решение:
источник
Потому что на этот вопрос нужен еще один ответ ...
Я попробовал несколько предыдущих решений, и у всех них был один или другой недостаток. Некоторые не убрали пунктуацию; некоторые не обрабатывали дела с номерами; некоторые не обрабатывали несколько знаков препинания подряд.
Никто из них не обращался с такой строкой
a1 2b
. Для этого случая не существует явного соглашения, но некоторые другие вопросы о стековом потоке предлагали разделять числа подчеркиванием.Я сомневаюсь, что это наиболее эффективный ответ (три строки проходят через строку, а не один или два), но он проходит все тесты, которые я могу придумать. Честно говоря, я действительно не могу представить случай, когда вы делаете так много конверсий верблюжьих, что производительность будет иметь значение.
(Я добавил это как пакет npm . Он также включает необязательный логический параметр для возврата Pascal Case вместо Camel Case.)
Тестовые случаи (Jest)
источник
Есть мое решение:
источник
Похоже, что этот метод превосходит большинство ответов здесь, он немного хакерский, но без замен, без регулярных выражений, просто создает новую строку, которая является camelCase.
источник
Это основывается на ответе CMS путем удаления любых неалфавитных символов, включая подчеркивания, которые
\w
не удаляются.источник
Верхний регистр верблюда («TestString») для нижнего регистра верблюда («testString») без использования регулярного выражения (давайте посмотрим правде в глаза, регулярное выражение является злом):
источник
Я закончил тем, что создал немного более агрессивное решение:
Этот выше удалит все не алфавитно-цифровые символы и строчные части слов, которые иначе остались бы заглавными, например
Size (comparative)
=>sizeComparative
GDP (official exchange rate)
=>gdpOfficialExchangeRate
hello
=>hello
источник
источник
Вот мое предложение:
или
Тестовые случаи:
источник
Я знаю, что это старый ответ, но он обрабатывает пробелы и _ (lodash)
источник
"
в.replace(/_/g", " ")
том , что ошибки компиляции причины?источник
РЕДАКТИРОВАТЬ : Теперь работает в IE8 без изменений.
РЕДАКТИРОВАТЬ : я был в меньшинстве о том, что на самом деле является camelCase (ведущий символ строчные и прописные.). Сообщество в целом считает, что лидирующие строчные буквы - это верблюжьи буквы, а лидирующие прописные буквы - это паскали. Я создал две функции, которые используют только шаблоны регулярных выражений. :) Так что мы используем единый словарный запас, я изменил свою позицию, чтобы соответствовать большинству.
Все, что я думаю, что вам нужно, это одно регулярное выражение в любом случае:
или
В функциях: вы заметите, что в этих функциях замена заменяет любой не-AZ пробелом на пустую строку. Это создать границы слов для заглавных букв. "привет-мой # мир" -> "HelloMyWorld"
Ноты:
наслаждаться
источник
Я думаю, что это должно работать ..
источник
Не используйте String.prototype.toCamelCase (), потому что String.prototypes доступны только для чтения, большинство компиляторов js выдает это предупреждение.
Как и я, те, кто знает, что строка всегда будет содержать только один пробел, могут использовать более простой подход:
Хорошего дня. :)
источник