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");
I don’t understand this regrex expression: .split(/(?:_| )+/)
First: what is the question mark before the colon "?: " means? (i couldn’t find in the material);
Second: there’s nothing after the “or” expression “|”, or is that a space after it?
Many thanks.
You should get in the habit of researching and tinkering.
Also, regex is weird.
When confronted with regex, I often hop over to a site like regex 101 and mess around with it. You can put in your regex and mess around with it. The “?:” is a bit of an oddball, but if I google “regex ?:”, explanations pop up.
Being able to research and figure things out is a very important skill for a developer. Professional developers are googling things several times a day. I’m an hour into my work day and I have spent at least half of that googling and reading things trying to figure out how to solve my issue.
Thank you for your suggestion. Now that I dig deeper into this, I found some problems with all these solutions:
It won’t remove the blank or any other non-word characters at the start of the string. Eg: the string “–This Is Spinal Tap” would return “–this-is-spinal-tap”.
I found the solution to this:
function spinalCase(str) {
return str
.replace(/^\W+/, "")
.split(/\W+|_|(?=[A-Z])/)
.join("-")
.toLowerCase();
}
console.log(spinalCase('--This Is Spinal Tap'));
// this-is-spinal-tap
We like to obscure working solutions to challenges so I added [spoiler][/spoiler] tags.
Yeah, the possible inputs are not clearly defined, so I agree that your solution is more robust.
Keep in mind that the solutions aren’t very well maintained so you have to take them with a grain of salt. Personally, I wish we’d just get rid of them.
I agree, I think it would encourage the research and tinkering as you mentioned too, instead of just looking at the solutions and moving on to the next challenge.