toSnakeCase property
String
get
toSnakeCase
Converts the string to snake_case.
Handles:
- camelCase (e.g., camelCaseString -> camel_case_string)
- PascalCase (e.g., PascalCaseString -> pascal_case_string)
- Spaces (e.g., Hello World -> hello_world)
- Hyphens (e.g., kebab-case-string -> kebab_case_string)
- Existing underscores (e.g., already_snake_case -> already_snake_case)
- Acronyms/consecutive uppercase letters (e.g., APIURL -> api_url, MyAWSKey -> my_aws_key)
- Leading/trailing spaces or multiple separators
Implementation
String get toSnakeCase {
String result = replaceAllMapped(
RegExp(r'([a-z0-9])([A-Z])'), (Match m) => '${m[1]!}_${m[2]!}');
result = result.replaceAllMapped(
RegExp(r'([A-Z])([A-Z][a-z])'), (Match m) => '${m[1]!}_${m[2]!}');
result = result
.split(RegExp(r'[\s_-]+'))
.where((word) => word.isNotEmpty)
.map((word) => word.toLowerCase())
.join('_');
return result;
}