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;
}