14/04/2026
W świecie programowania, gdzie czytelność kodu i spójność są kluczowe, konwencje nazewnictwa odgrywają niezwykle ważną rolę. Niezależnie od tego, czy pracujesz nad dużym projektem zespołowym, czy nad własnym małym skryptem, konsekwentne nazewnictwo zmiennych, funkcji i plików znacząco ułatwia zrozumienie, utrzymanie i debugowanie kodu. Dziś skupimy się na dwóch bardzo popularnych stylach: Snake Case i Kebab Case, a także pokażemy, jak efektywnie konwertować stringi między tymi formatami w języku JavaScript.

Czym są konwencje nazewnictwa?
Konwencje nazewnictwa to zbiór zasad dotyczących pisania złożonych słów lub fraz w kodzie. Nie są one sztywno narzucone przez język programowania, ale są powszechnie przyjętymi praktykami, które promują spójność i jasność. Wybór odpowiedniej konwencji może być przedmiotem sporów, ale cel zawsze jest ten sam: uczynić kod bardziej czytelnym i łatwiejszym do współpracy. Różne języki i frameworki często preferują różne style, dlatego umiejętność konwersji jest niezwykle przydatna w codziennej pracy programisty.
Poznaj style nazewnictwa stringów
Zanim zagłębimy się w techniki konwersji, musimy najpierw gruntownie rozpoznać i zrozumieć najpopularniejsze style pisania stringów. Poznajmy cztery główne, z naciskiem na te, które są tematem naszego artykułu: Snake Case i Kebab Case.
1. Snake Case
Snake Case to praktyka pisania złożonych słów, w której słowa są oddzielone pojedynczym znakiem podkreślenia (_) i nie ma spacji. Standardowo, wszystkie litery są pisane małymi literami, choć czasem można spotkać wersję z wielkimi literami (UPPER_SNAKE_CASE) dla stałych. Jest to powszechnie używana konwencja do deklarowania nazw zmiennych, nazw funkcji, a czasem nazw plików w językach takich jak Python, Ruby czy w nazwach kolumn baz danych SQL.
Przykłady:
hello_worldit_department_datauser_profile_picturetotal_items_in_cart
2. Kebab Case
W Kebab Case wszystkie litery są pisane małymi literami, a słowa są oddzielone łącznikiem lub znakiem minus (-). Notacja Kebab Case jest często używana jako konwencja do nazywania plików, adresów URL (tzw. slugów) oraz klas i identyfikatorów CSS. Jest ceniona za swoją czytelność w środowiskach webowych i przyjazność dla SEO, ponieważ myślniki są standardowym separatorem słów w adresach internetowych.
Przykłady:
kebab-case-examplefootball-match-scoremy-awesome-article-titleproduct-details-page
Inne popularne style (Camel Case, Pascal Case)
Dla pełnego obrazu i kontekstu warto wspomnieć o innych, równie powszechnie stosowanych konwencjach nazewnictwa:
- Camel Case (lowerCamelCase): Opisuje praktykę pisania fraz, w której każde słowo lub skrót w środku frazy zaczyna się od wielkiej litery, bez spacji i znaków interpunkcyjnych. Pierwsze słowo zaczyna się małą literą. Przykład:
camelCaseExample,myLaptop. Jest to dominująca konwencja w JavaScript dla zmiennych i funkcji, a także często spotykana w Javie. - Pascal Case (UpperCamelCase): Podobny do Camel Case, ale pierwsza litera całego wyrażenia również jest pisana wielką literą. Nie ma spacji ani myślników oddzielających słowa. Przykład:
PascalCaseExample,MainBuilding. Ten styl jest często używany jako konwencja do tworzenia nazw klas w wielu językach programowania, takich jak Java, C# i JavaScript (dla komponentów React).
Poniższa tabela przedstawia krótkie porównanie tych czterech stylów, aby ułatwić ich rozróżnienie:
| Styl | Opis | Przykład | Typowe zastosowanie |
|---|---|---|---|
| Snake Case | Słowa oddzielone podkreśleniem, małe litery | moja_zmienna_testowa | Zmienne, funkcje (Python, Ruby), nazwy kolumn SQL |
| Kebab Case | Słowa oddzielone myślnikiem, małe litery | moj-plik-css | Nazwy plików, URL-e (slugi), CSS, komponenty webowe |
| Camel Case | Pierwsze słowo małą literą, kolejne słowa zaczynają się od wielkiej litery | mojaZmiennaLokalna | Zmienne, funkcje (JavaScript, Java) |
| Pascal Case | Każde słowo zaczyna się od wielkiej litery | MojaKlasaGłówna | Nazwy klas (Java, C#, JavaScript), konstruktory |
Dlaczego konwersja stringów jest ważna?
Umiejętność konwersji stringów między różnymi stylami jest nieoceniona w wielu scenariuszach programistycznych. Może być ona niezbędna, gdy:
- Integrujesz swój kod z zewnętrznymi bibliotekami lub frameworkami, które narzucają inną konwencję nazewnictwa niż ta, której używasz w swoim projekcie.
- Tworzysz "slugi" dla adresów URL z tytułów artykułów lub produktów, które muszą być w Kebab Case dla lepszego SEO i czytelności.
- Pracujesz z danymi pochodzącymi z baz danych, gdzie nazwy kolumn są zazwyczaj w Snake Case, a w warstwie aplikacji preferujesz Camel Case.
- Automatyzujesz procesy generowania kodu, plików konfiguracyjnych lub dynamicznych nazw zasobów.
- Musisz zachować spójność w całym projekcie, mimo że różne moduły lub zespoły mogą używać odmiennych standardów nazewnictwa.
Poprawna i elastyczna konwersja pozwala na płynne przejście między różnymi ekosystemami programistycznymi i utrzymanie wysokiej jakości, modularnego kodu.
Praktyczne metody konwersji stringów w JavaScript
W JavaScript istnieje wiele sposobów na konwersję stringów do różnych stylów nazewnictwa. Poniżej przedstawimy najskuteczniejsze metody, w tym te wykorzystujące potężne wyrażenia regularne (RegEx), które zapewniają dużą elastyczność i niezawodność.

Uniwersalne podejście z wyrażeniami regularnymi (RegEx)
Podstawą solidnej konwersji jest umiejętność identyfikacji granic między poszczególnymi słowami w stringu, niezależnie od początkowego formatu (czy to spacje, podkreślenia, myślniki, czy też wielkie litery charakterystyczne dla Camel/Pascal Case). Bardzo efektywnym i wszechstronnym narzędziem do tego celu są wyrażenia regularne. Wyrażenie, które okazało się niezwykle solidne w identyfikacji słów z różnych stylów, to:
/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/gZrozumienie wyrażenia RegEx
Choć na pierwszy rzut oka może wydawać się skomplikowane, rozłożymy je na części, aby ułatwić zrozumienie jego logiki:
[A-Z]{2,}: Dopasowuje dwie lub więcej kolejnych wielkich liter. Jest to przydatne do identyfikacji akronimów, takich jak "XML", "HTML", "API", aby traktować je jako pojedyncze słowa.(?=[A-Z][a-z]+[0-9]*|\b): To tzw. "lookahead assertion" (sprawdzenie w przód), które zapewnia, że dopasowany akronim jest rzeczywiście akronimem, a nie tylko początkiem słowa w Pascal Case. Sprawdza, czy po akronimie następuje granica słowa (\b) lub litera wielka, po której następuje co najmniej jedna mała litera i opcjonalnie cyfry.|: Operator "OR", który pozwala na dopasowanie jednego z kilku wzorców.[A-Z]?[a-z]+[0-9]*: Dopasowuje słowo zaczynające się od opcjonalnej wielkiej litery ([A-Z]?), po której następuje jedna lub więcej małych liter ([a-z]+) i zero lub więcej cyfr ([0-9]*). Przykłady: "some", "JavaScript", "user123".[A-Z]: Dopasowuje pojedynczą wielką literę (np. "A", "B"), co jest przydatne dla pojedynczych liter w stringach.[0-9]+: Dopasowuje jedną lub więcej kolejnych cyfr (np. "123", "45").g: Flaga globalna, która pozwala wyrażeniu regularnemu dopasować wszystkie wystąpienia w stringu, a nie tylko pierwsze.
To wyrażenie jest kluczowe, ponieważ pozwala na niezawodne rozbicie stringu na poszczególne "słowa" lub segmenty, niezależnie od oryginalnego formatu (Camel Case, Pascal Case, stringi ze spacjami, podkreśleniami, czy myślnikami).
Konwersja na Snake Case
Aby przekonwertować string na Snake Case, musimy najpierw rozbić go na słowa za pomocą omówionego RegEx, następnie przekształcić każde z tych słów na małe litery, a na końcu połączyć je podkreśleniami (_).
const toSnakeCase = str => { if (!str) return ''; // Używamy match() z naszym uniwersalnym RegEx do wyodrębnienia słów return str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) .map(x => x.toLowerCase()) // Konwertujemy każde słowo na małe litery .join('_'); // Łączymy słowa podkreśleniami }; console.log(toSnakeCase('camelCaseExample')); // 'camel_case_example' console.log(toSnakeCase('some text with spaces')); // 'some_text_with_spaces' console.log(toSnakeCase('some-mixed_string With spaces_underscores-and-hyphens')); // 'some_mixed_string_with_spaces_underscores_and_hyphens' console.log(toSnakeCase('AllThe-small Things')); // 'all_the_small_things' console.log(toSnakeCase('IAmEditingSomeXMLAndHTML')); // 'i_am_editing_some_xml_and_html' console.log(toSnakeCase('Geeks For Geeks')); // 'geeks_for_geeks' console.log(toSnakeCase('GeeksForGeeks')); // 'geeks_for_geeks' console.log(toSnakeCase('Geeks_For_Geeks')); // 'geeks_for_geeks' Jak widać na przykładach, ta metoda jest niezwykle elastyczna i radzi sobie z różnymi formatami wejściowymi, konwertując je prawidłowo na Snake Case.
Konwersja na Kebab Case
Proces konwersji stringu na Kebab Case jest niemal identyczny jak na Snake Case. Główna i jedyna różnica polega na tym, że słowa są łączone myślnikiem (-) zamiast podkreślenia (_).
const toKebabCase = str => { if (!str) return ''; // Używamy match() z tym samym uniwersalnym RegEx return str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) .map(x => x.toLowerCase()) // Konwertujemy każde słowo na małe litery .join('-'); // Łączymy słowa myślnikami }; console.log(toKebabCase('camelCaseExample')); // 'camel-case-example' console.log(toKebabCase('some text with spaces')); // 'some-text-with-spaces' console.log(toKebabCase('some-mixed_string With spaces_underscores-and-hyphens')); // 'some-mixed-string-with-spaces-underscores-and-hyphens' console.log(toKebabCase('AllThe-small Things')); // 'all-the-small-things' console.log(toKebabCase('IAmEditingSomeXMLAndHTML')); // 'i-am-editing-some-xml-and-html' console.log(toKebabCase('Geeks For Geeks')); // 'geeks-for-geeks' console.log(toKebabCase('GeeksForGeeks')); // 'geeks-for-geeks' console.log(toKebabCase('Geeks_For_Geeks')); // 'geeks-for-geeks' Jak widać, zastosowanie tego samego, potężnego wyrażenia regularnego sprawia, że konwersja jest prosta i efektywna dla obu stylów.
Alternatywne metody konwersji (przykłady dla Kebab Case, adaptowalne)
Oprócz uniwersalnego podejścia z rozbudowanym RegEx, istnieją inne, często prostsze metody, które mogą być wystarczające dla mniej złożonych przypadków wejściowych lub gdy znasz specyficzny format stringu źródłowego. Poniższe przykłady skupiają się na konwersji na Kebab Case, ale ich zasady są łatwo adaptowalne do Snake Case poprzez zmianę separatora.

Metoda replace()
Ta metoda wykorzystuje funkcję replace() do zamiany wzorców w stringu. Często stosuje się ją dwukrotnie: raz do obsługi przejść między wielkimi i małymi literami (jak w Camel/Pascal Case), a raz do zamiany spacji i podkreśleń.
const kebabCaseReplace = string => string .replace(/([a-z])([A-Z])/g, "$1-$2") // Dodaje myślnik przed wielką literą (np. 'camelCase' -> 'camel-Case') .replace(/[\s_]+/g, '-') // Zamienia spacje i podkreślenia na myślniki .toLowerCase(); // Konwertuje całość na małe litery console.log(kebabCaseReplace('Geeks For Geeks')); // geeks-for-geeks console.log(kebabCaseReplace('GeeksForGeeks')); // geeks-for-geeks console.log(kebabCaseReplace('Geeks_For_Geeks')); // geeks-for-geeks console.log(kebabCaseReplace('XMLHTTPExample')); // xml-http-example (może wymagać doprecyzowania dla akronimów) Ta metoda jest bardziej zwięzła i łatwa do zrozumienia, ale może nie radzić sobie tak dobrze ze wszystkimi krawędziowymi przypadkami (np. złożone akronimy) jak uniwersalne RegEx.
Metoda match()
Wcześniej pokazaliśmy match() z uniwersalnym RegEx. Można go również użyć z prostszymi wyrażeniami, jeśli format wejściowy jest bardziej przewidywalny. Jednak dla pełnej robustności, uniwersalne RegEx jest preferowane.
const kebabCaseMatchSimple = str => str .match(/([A-Z]?[a-z]+|[A-Z]+|[0-9]+)/g) // Prostszego RegEx do rozbicia na słowa .join('-') .toLowerCase(); // Ten przykład używa prostszego RegEx, które może nie radzić sobie z wszystkimi przypadkami console.log(kebabCaseMatchSimple('Geeks For Geeks')); // geeks-for-geeks console.log(kebabCaseMatchSimple('GeeksForGeeks')); // geeks-for-geeks console.log(kebabCaseMatchSimple('Geeks_For_Geeks')); // geeks-for-geeks Pamiętaj, że wybór wyrażenia regularnego jest kluczowy dla poprawności konwersji; to zależy od różnorodności stringów wejściowych, które musisz przetwarzać.
Biblioteka Lodash (metoda _.kebabCase())
Dla projektów korzystających z popularnych bibliotek narzędziowych, takich jak Lodash, konwersja jest często uproszczona do wywołania pojedynczej, gotowej funkcji. Lodash oferuje wygodną metodę _.kebabCase(), która jest zoptymalizowana do radzenia sobie z różnymi formatami wejściowymi.
// Wymaga zainstalowania Lodash: npm install lodash const _ = require('lodash'); let str1 = _.kebabCase("GEEKS__FOR__GEEKS"); console.log(str1); // "geeks-for-geeks" let str2 = _.kebabCase("GEEKS-----FOR_____Geeks"); console.log(str2); // "geeks-for-geeks" let str3 = _.kebabCase("geeks--FOR--geeks"); console.log(str3); // "geeks-for-geeks" let str4 = _.kebabCase("CamelCaseExample"); console.log(str4); // "camel-case-example" Użycie biblioteki zewnętrznej jest najprostszym i często najbardziej niezawodnym rozwiązaniem, jeśli projekt już jej używa lub jeśli chcesz zminimalizować pisanie własnego kodu do obsługi skomplikowanych krawędziowych przypadków.

Pętla for
Dla tych, którzy preferują bardziej manualne podejście lub potrzebują pełnej kontroli nad procesem, konwersję można zaimplementować za pomocą prostej pętli for. Ta metoda wymaga iteracji po każdym znaku stringu i podejmowania decyzji na podstawie jego typu (wielka litera, spacja, podkreślenie, itp.).
function toKebabCaseLoop(str) { let kebabCase = ''; for (let i = 0; i < str.length; i++) { const char = str[i]; // Jeśli znak jest wielką literą i nie jest pierwszym znakiem, dodaj myślnik przed konwersją na małą literę if (char.toUpperCase() === char && char.toLowerCase() !== char) { if (i > 0 && kebabCase[kebabCase.length - 1] !== '-') { kebabCase += '-'; } kebabCase += char.toLowerCase(); } // Jeśli znak to spacja, podkreślenie lub myślnik, dodaj myślnik (unikając duplikatów) else if (char === ' ' || char === '_' || char === '-') { if (kebabCase.length > 0 && kebabCase[kebabCase.length - 1] !== '-') { kebabCase += '-'; } } // W przeciwnym razie dodaj znak (po konwersji na małą literę) else { kebabCase += char.toLowerCase(); } } // Usuń ewentualne podwójne myślniki i myślniki na początku/końcu return kebabCase.replace(/--+/g, '-').replace(/^-|-$/g, ''); } console.log(toKebabCaseLoop("welcomeToGeeksForGeeks")); // welcome-to-geeks-for-geeks console.log(toKebabCaseLoop("some text with spaces")); // some-text-with-spaces console.log(toKebabCaseLoop("Geeks For Geeks")); // geeks-for-geeks console.log(toKebabCaseLoop("GeeksForGeeks")); // geeks-for-geeks console.log(toKebabCaseLoop("Geeks_For_Geeks")); // geeks-for-geeks console.log(toKebabCaseLoop("GEEKS__FOR__GEEKS")); // geeks-for-geeks console.log(toKebabCaseLoop("XMLParserHTMLData")); // xml-parser-html-data Ta metoda jest bardziej pracochłonna i wymaga starannego zarządzania logiką dla różnych przypadków, ale daje pełną kontrolę nad procesem konwersji i nie wymaga zewnętrznych bibliotek.
Tabela porównawcza stylów konwersji
Aby ułatwić zrozumienie, jak różne style konwersji wpływają na ten sam string, przygotowaliśmy poniższą tabelę. Pokazuje ona, jak przykładowe stringi, pochodzące z różnych stylów wejściowych, wyglądają po przekształceniu na Snake Case i Kebab Case za pomocą omawianych metod.
| String Wejściowy | Wynik Snake Case | Wynik Kebab Case |
|---|---|---|
HelloWorld | hello_world | hello-world |
some_text_here | some_text_here | some-text-here |
KebabCaseExample | kebab_case_example | kebab-case-example |
This is a test string | this_is_a_test_string | this-is-a-test-string |
XMLParserHTMLData | xml_parser_html_data | xml-parser-html-data |
another_mix-of cases | another_mix_of_cases | another-mix-of-cases |
first-second_third fourth | first_second_third_fourth | first-second-third-fourth |
Najczęściej Zadawane Pytania (FAQ)
Czy Snake Case jest lepszy od Kebab Case?
Żaden styl nie jest uniwersalnie "lepszy" od drugiego. Wybór zależy od kontekstu projektu, używanego języka programowania, frameworka oraz przyjętych standardów w zespole. Snake Case jest bardzo popularny w językach takich jak Python i Ruby, często używany do nazw zmiennych, funkcji i nazw plików w systemach operacyjnych. Kebab Case jest natomiast preferowany w środowiskach webowych dla adresów URL (tzw. slugów), nazw klas CSS i komponentów w niektórych frameworkach front-endowych, ponieważ myślniki są bardziej naturalne dla przeglądarek i są przyjazne dla SEO. Kluczowe jest, aby wybrać jedną konwencję dla danego kontekstu i konsekwentnie się jej trzymać, co zwiększa czytelność kodu i ułatwia współpracę.
Czy mogę konwertować inne style (np. Camel Case) do Snake/Kebab Case?
Tak, absolutnie! Metody przedstawione w tym artykule, zwłaszcza te wykorzystujące rozbudowane wyrażenia regularne, są zaprojektowane tak, aby radzić sobie z różnymi formatami wejściowymi, w tym Camel Case, Pascal Case, stringami zawierającymi spacje, czy też już z podkreśleniami lub myślnikami. Uniwersalny RegEx, który omówiliśmy, jest kluczem do prawidłowego rozbicia stringu na jego składowe "słowa", a następnie ponownego ich połączenia w pożądanym formacie Snake Case lub Kebab Case. Dzięki temu możesz z łatwością adaptować dane z różnych źródeł do standardów swojego projektu.
Do czego najczęściej używa się Kebab Case?
Kebab Case jest najczęściej używany do:
- Tworzenia przyjaznych adresów URL (tzw. slugów) dla stron internetowych i artykułów blogowych, np.
moj-nowy-artykul-o-programowaniu. Jest to kluczowe dla optymalizacji pod kątem wyszukiwarek (SEO). - Nazywania plików w systemach operacyjnych, zwłaszcza w projektach webowych (np.
style-arkusz.css,glowny-komponent.js). - Nazywania klas i identyfikatorów w CSS (np.
.main-header,#secondary-navigation). - Nazw komponentów w niektórych frameworkach front-endowych (np. Vue.js, gdzie nazwy komponentów HTML są w Kebab Case).
Do czego najczęściej używa się Snake Case?
Snake Case jest najczęściej używany do:
- Nazw zmiennych i funkcji w językach programowania takich jak Python i Ruby (np.
moja_zmienna,oblicz_sume_elementow()). - Nazw kolumn w bazach danych SQL (np.
nazwa_uzytkownika,data_utworzenia_rekordu). - Nazw plików w systemach operacyjnych, szczególnie w projektach bazodanowych, skryptach powłoki lub w systemach, gdzie preferowane są podkreślenia jako separatory.
- Definiowania stałych w niektórych językach programowania, często w formie UPPER_SNAKE_CASE (np.
MAX_VALUE,PI_CONSTANT).
Podsumowując, opanowanie różnych stylów nazewnictwa stringów i umiejętność ich konwersji jest niezbędną umiejętnością dla każdego programisty. W tym artykule nauczyliśmy się, jak rozróżniać Snake Case i Kebab Case, a także poznaliśmy solidne metody ich konwersji w JavaScript, zarówno za pomocą potężnych wyrażeń regularnych, jak i alternatywnych podejść. Niezależnie od tego, czy Twoim celem jest zwiększenie czytelności kodu, poprawa SEO czy płynna integracja z różnymi systemami, teraz masz narzędzia, by sprawnie zarządzać nazewnictwem stringów w swoich projektach. Pamiętaj, że konsekwencja w nazewnictwie to fundament czystego, zrozumiałego i efektywnego kodu.
Zainteresował Cię artykuł Snake Case i Kebab Case: Przewodnik po Konwersji? Zajrzyj też do kategorii Gastronomia, znajdziesz tam więcej podobnych treści!
