āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā š shadcn/directory/brennenrocks/utilcn/strings/to-kebab-case ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
import { toKebabCase } from '@/lib/to-kebab-case';
const result = toKebabCase("Hello World Again");
console.log(result); // "hello-world-again"
| Parameter | Type | Description |
|-----------|----------|------------------|
| str | string | The input string |
string - The kebab-cased string.
toKebabCase("Hello World Again"); // "hello-world-again"
toKebabCase("XMLHttpRequest"); // "xml-http-request"
toKebabCase("user_name"); // "user-name"
toKebabCase("APIResponse"); // "api-response"
toKebabCase("HTML Parser"); // "html-parser"
export function toKebabCase(str: string): string {
return (
str
// Split acronym groups (e.g. "XMLHttp" -> "XML-Http")
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
// Split between a lowercase/digit and an uppercase (e.g. "testHTTP" -> "test-HTTP")
.replace(/([a-z\d])([A-Z])/g, '$1-$2')
// Replace spaces and underscores with hyphens
.replace(/[\s_]+/g, '-')
.toLowerCase()
// Remove leading and trailing hyphens
.replace(/^-+|-+$/g, '')
);
}
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā