Source: toSnakeCase/toSnakeCase.js

/**
 * Converts all the alphabetic characters in a snake case string.
 * @param {String} str The text to be converted to snake case.
 */
export const toSnakeCase = (str) =>
  str
    .replace(/^[^A-Za-z\d]*|[^A-Za-z\d]*$/g, "")
    .replace(/([a-z])([A-Z])/g, (_, a, b) => a + "_" + b.toLowerCase())
    .replace(/[^A-Za-z\d]+/g, "_")
    .toLowerCase();

// console.log(toSnakeCase("passwordGenerator"));      // ✔ should convert a camel case string to snake case
// console.log(toSnakeCase("password.generator"));     // ✔ should convert a dot case string to snake case
// console.log(toSnakeCase("--PASSWORD-GENERATOR--")); // ✔ should convert a junk case string to snake case
// console.log(toSnakeCase("password-generator"));     // ✔ should convert a kebab case string to snake case
// console.log(toSnakeCase("PasswordGenerator"));      // ✔ should convert a pascal case string to snake case
// console.log(toSnakeCase("Password generator"));     // ✔ should convert a sentence case string to snake case
// console.log(toSnakeCase("password_generator"));     // ✔ should convert a snake case string to snake case
// console.log(toSnakeCase("password generator"));     // ✔ should convert a space case string to snake case
// console.log(toSnakeCase("Password Generator"));     // ✔ should convert a title case string to snake case
// console.log(toSnakeCase("PASSWORD GENERATOR"));     // ✔ should convert a uppercase case string to snake case