freeCodeCamp Algorithm Challenge Template Guide

Convert the given string to a lowercase sentence with words joined by dashes.

Relevant Links

:speech_balloon: Hint: 1

Create a regular expression for all white spaces and underscores.

try to solve the problem now

:speech_balloon: Hint: 2

You will also have to make everything lowercase.

try to solve the problem now

:speech_balloon: Hint: 3

The tricky part is getting the regular expression part to work, once you do that then just turn the uppercase to lowercase and replace spaces with underscores using replace() .

try to solve the problem now

Spoiler Alert!

warning sign

Solution ahead!

:beginner: Basic Code Solution:

function spinalCase(str) {
  // Create a variable for the white space and underscores.
  var regex = /\s+|_+/g;

  // Replace low-upper case to low-space-uppercase
  str = str.replace(/([a-z])([A-Z])/g, '$1 $2');

  // Replace space and underscore with -
  return str.replace(regex, '-').toLowerCase();
}

// test here
spinalCase('This Is Spinal Tap');

:rocket: Run Code

Code Explanation:

  • regex contains the regular expression /\s+|_+/g , which will select all white spaces and underscores.
  • The first replace() puts a space before any encountered uppercase characters in the string str so that the spaces can be replaced by dashes later on.
  • While returning the string, another replace() replaces spaces and underscores with dashes using regex .

:sunflower: Intermediate Code Solution:

function spinalCase(str) {
  // Replace low-upper case to low-space-uppercase
  str = str.replace(/([a-z])([A-Z])/g, '$1 $2');
  // Split on whitespace and underscores and join with dash
  return str.toLowerCase().split(/(?:_| )+/) .join('-');
}

// test here
spinalCase('This Is Spinal Tap');

:rocket: Run Code

Code Explanation:

  • Similar to the first solution, the first replace() puts a space before any encountered uppercase characters in the string str so that the spaces can be replaced by dashes later on.
  • Instead of using replace() here to replace whitespace and underscores with dashes, the string is split() on the regular expression /(?:_| )+/ and join() -ed on - .

Relevant Links

:rotating_light: Advanced Code Solution:

function spinalCase(str) {
  // "It's such a fine line between stupid, and clever."
  // --David St. Hubbins

  return str.split(/\s+|_+|(?=[A-Z])/).join('-').toLowerCase()
}

:rocket: Run Code

Code Explanation:

  • Split the string at one of the following conditions ( converted to an array )
    • a whitespace character [ \s ] is encountered
    • underscore character [ _ ] is encountered
    • or is followed by an uppercase letter [ (?=[A-Z]) ]
  • Join the array using a hyphen ( - )
  • Lowercase the whole resulting string
      • sign is used so as to avoid multiple spaces.

Relevant Links

:clipboard: NOTES FOR CONTRIBUTIONS:

  • :warning: DO NOT add solutions that are similar to any existing solutions. If you think it is similar but better , then try to merge (or replace) the existing similar solution.
  • Add an explanation of your solution.
  • Categorize the solution in one of the following categories — Basic , Intermediate and Advanced . :traffic_light:
  • Please add your username only if you have added any relevant main contents . ( :warning: DO NOT remove any existing usernames )

See :point_right: Wiki Challenge Solution Template for reference.

10 Likes