Programación de algoritmos intermedios - Spinal case

Cuéntanos qué está pasando:
Buenas tengo el problema de que no se como separar el caso de tener una cadena sin espacios y con mayúsculas entremedias.

  **Tu código hasta el momento**
function spinalCase(str) {
//Crear variable que elimina espacios al principio y el final
//Separar el string por espacios en blanco y guiones bajos
//Unir el string por guiones y convertirlo a minúsculas
let spinal = str.trim().split(/[\s_]+/g).join("-").toLowerCase();





console.log(spinal)
//return spinal;
}

spinalCase('This Is Spinal Tap');
spinalCase("thisIsSpinalTap");
spinalCase("The_Andy_Griffith_Show");
  **Información de tu navegador:**

El agente de usuario es: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36

Desafío: Programación de algoritmos intermedios - Spinal case

Enlaza al desafío:

Al final he encontrado la solución, era crear una expresión regular en la método replace() que pusiera un espacio en blanco entre las palabras que encuentre en el primer carácter un minúscula y en el segundo un mayúscula. Dejo mi código por si os sirve de ayuda.

function spinalCase(str) {
  //Crear variable que elimina espacios al principio y el final
  //Poner espacio entre las palabras juntas sin espacio que sean minúscula y mayúscula
  //Separar el string por espacios en blanco o guiones bajos
  //Unir el string por guiones y convertirlo a minúsculas
  let spinal = str.trim().replace(/([a-z])([A-Z])/g, "$1 $2").split(/[\s|_]+/g).join("-").toLowerCase();

  return spinal;
}