Z wyrażeniem regularnym (zakładam) lub inną metodą, w jaki sposób mogę przekonwertować takie rzeczy, jak:
marker-image
lub my-example-setting
do markerImage
lub myExampleSetting
.
Myślałem o podzieleniu, -
a następnie przekonwertowaniu indeksu łącznika +1 na wielkie litery. Ale wydaje się dość brudny i liczyłem na pomoc z regexem, który mógłby uczynić kod czystszym.
Brak jQuery ...
javascript
regex
camelcasing
Oscar Godson
źródło
źródło
Odpowiedzi:
Spróbuj tego:
Wyrażenie regularne dopasuje
-i
inmarker-image
i przechwyci tylkoi
. To jest następnie wielkie litery w funkcji wywołania zwrotnego i zastępowane.źródło
myString.replace(/([a-z][A-Z])/g, function (g) { return g[0] + '-' + g[1].toLowerCase() });
myString.replace(/-([a-z])/i, function (i) { return i[1].toUpperCase() });
i
flagi. Bez tego wzorzec pomija „części z wielkimi literami” (nie zostanie zmieniony na „części z wielkimi literami”). Osobiście wolę też lepszą czytelność wielu parametrów, ale to oczywiście kwestia stylu. W sumie poszedłbym z.replace( /-([a-z])/gi, function ( $0, $1 ) { return $1.toUpperCase(); } );
.var camelCased = myString.replace(/(-+|\s+)\w/g, function (g) { return g[1].toUpperCase(); });
var camelCased = myString.replace(/(-+|\s+)\w/g, function (g) { return g[g.length - 1].toUpperCase(); });
:?Jest to jedno z najlepszych narzędzi oferowanych przez firmę Lodash, jeśli jesteś oświecony i uwzględniono je w swoim projekcie.
źródło
Możesz pobrać myślnik i następny znak i zastąpić go wersją znaku pisaną wielkimi literami:
źródło
Oto moja wersja funkcji camelCase:
Obsługuje wszystkie następujące przypadki skrajne:
Oto link do testów na żywo: http://jsfiddle.net/avKzf/2/
Oto wyniki testów:
Zwróć uwagę, że ciągi zaczynające się od ograniczników będą skutkować dużą literą na początku. Jeśli nie tego byś się spodziewał, zawsze możesz skorzystać z lcfirst. Oto moje pierwsze lc, jeśli go potrzebujesz:
źródło
To nie krzyczy
RegExp
do mnie. Osobiście staram się unikać wyrażeń regularnych, gdy wystarczą proste metody łańcuchowe i tablicowe:źródło
Oto kolejna opcja, która łączy tutaj kilka odpowiedzi i sprawia, że jest to metoda na łańcuchu:
Używane w ten sposób:
źródło
źródło
Możesz użyć camelcase z NPM.
npm install --save camelcase
źródło
Kolejne ujęcie.
źródło
jest również możliwe użycie indexOf z rekurencją dla tego zadania.
porównanie ::: mierzenie czasu wykonania dla dwóch różnych skryptów:
kod:
źródło
Tylko wersja z flagą, dla pętli i bez Regex:
źródło
Oto moja realizacja (żeby zabrudzić ręce)
źródło
Użyj tego, jeśli zezwalasz na liczby w swoim ciągu.
Oczywiście części zaczynające się od liczby nie będą pisane wielkimi literami, ale może to być przydatne w niektórych sytuacjach.
źródło