๋ฌธ์
์ ๊ท ์์ด๋ ์ถ์ฒ ๋ฌธ์ .
์นด์นด์ค์ ์ ์ฌํ ์ ์ ๊ฐ๋ฐ์ ๋ค์ค๋ ์นด์นด์ค๊ณ์ ๊ฐ๋ฐํ์ ๋ฐฐ์น๋์ด, ์นด์นด์ค ์๋น์ค์ ๊ฐ์ ํ๋ ์ ์ ๋ค์ ์์ด๋๋ฅผ ์์ฑํ๋ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์์ต๋๋ค. ๋ค์ค์๊ฒ ์ฃผ์ด์ง ์ฒซ ์ ๋ฌด๋ ์๋ก ๊ฐ์ ํ๋ ์ ์ ๋ค์ด ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง์ง ์๋ ์์ด๋๋ฅผ ์ ๋ ฅํ์ ๋, ์ ๋ ฅ๋ ์์ด๋์ ์ ์ฌํ๋ฉด์ ๊ท์น์ ๋ง๋ ์์ด๋๋ฅผ ์ถ์ฒํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋๋ค.
๋ค์์ ์นด์นด์ค ์์ด๋์ ๊ท์น์ ๋๋ค.
- ์์ด๋์ ๊ธธ์ด๋ 3์ ์ด์ 15์ ์ดํ์ฌ์ผ ํฉ๋๋ค.
- ์์ด๋๋ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.) ๋ฌธ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋จ, ๋ง์นจํ(.)๋ ์ฒ์๊ณผ ๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ํ ์ฐ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ค๋ ๋ค์๊ณผ ๊ฐ์ด 7๋จ๊ณ์ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด ์ ๊ท ์ ์ ๊ฐ ์ ๋ ฅํ ์์ด๋๊ฐ ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง๋ ์ง ๊ฒ์ฌํ๊ณ ๊ท์น์ ๋ง์ง ์์ ๊ฒฝ์ฐ ๊ท์น์ ๋ง๋ ์๋ก์ด ์์ด๋๋ฅผ ์ถ์ฒํด ์ฃผ๋ ค๊ณ ํฉ๋๋ค.
1๋จ๊ณ new_id์ ๋ชจ๋ ๋๋ฌธ์๋ฅผ ๋์๋๋ ์๋ฌธ์๋ก ์นํํฉ๋๋ค.
2๋จ๊ณ new_id์์ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.)๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
3๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ 2๋ฒ ์ด์ ์ฐ์๋ ๋ถ๋ถ์ ํ๋์ ๋ง์นจํ(.)๋ก ์นํํฉ๋๋ค.
4๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ ์ฒ์์ด๋ ๋์ ์์นํ๋ค๋ฉด ์ ๊ฑฐํฉ๋๋ค.
5๋จ๊ณ new_id๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, new_id์ "a"๋ฅผ ๋์ ํฉ๋๋ค.
6๋จ๊ณ new_id์ ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฉด, new_id์ ์ฒซ 15๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค. ๋ง์ฝ ์ ๊ฑฐ ํ ๋ง์นจํ(.)๊ฐ new_id์ ๋์ ์์นํ๋ค๋ฉด ๋์ ์์นํ ๋ง์นจํ(.) ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
7๋จ๊ณ new_id์ ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, new_id์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ new_id์ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์ ๋๋ค.
์ฝ๋
ํ์ด
์ ๊ท์๊ณผ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ๋ฉ์๋๋ฅผ ์ ์ ํ ํ์ฉํด ์์ฐจ์ ์ผ๋ก ํธ๋ ๋ฌธ์ ์ด๋ค.
1๋จ๊ณ๋ ๋ฌธ์์ด์ ๋ชจ๋ ๋๋ฌธ์๋ฅผ ๋์๋๋ ์๋ฌธ์๋ก ์นํํ๋ฏ๋ก toLowerCase()๋ฅผ ์ฌ์ฉํ๋ค.
๋ง์ผ ์ ๊ท์์ผ๋ก ๋๋ฌธ์๋ง ๊ณจ๋ผ์ ๋ฐ๊พผ๋ค๊ณ ํ๋ฉด, id.replace(/[A-Z]/g, (match) => match.toLowerCase()); ์ด๋ ๊ฒ๋ ์จ๋ณผ ์ ์๊ฒ ์ง๋ง, ํจ์จ์ด ๋จ์ด์ง๋ค.
2๋จ๊ณ๋ ํน์ ๋ฌธ์๋ค์ ์ ๊ฑฐํ ์ ์๋๋ก ์ ๊ท์์ ์ด๋ค.
id.replace(/[^a-z0-9\-_.]/g, ""); ํ ๋ฒ lowerCase๋ก ๋ฐ๊ฟ์ฃผ์์ง๋ง, a-z๋ก ๋ช ์์ ์ผ๋ก ๋ํ๋ผ ์๋ ์๊ณ , ์๋ ๊ทธ๋ฆผ์ฒ๋ผ \w๋ก ๋ชจ๋ ๋ผํด๊ณ์ด์ ๋ฌธ์๋ฅผ ๋ํ๋ด๋ Character Class๋ฅผ ์จ์ฃผ์ด๋ ๋๋ค.
(๋จ, \w์๋ ์ซ์์ ๋ฐ์ค์ ํฌํจํ๋ค)
[ ] ๋๋ฌธ์ ์์ ์ด ^(์บ๋ฟ) ๊ธฐํธ๋ ๋๋ฌธ์ ๋ด๋ถ์ ์จ๋ 0-9(์ซ์) a-z(์๋ฌธ์), -(ํ์ดํ), _ (์ธ๋๋ฐ), .(๋ง์นจํ)๋ฅผ ์ ์ธํ๋ค๋ ์๋ฏธ์ด๋ค.
Test String์ ํ์ด๋ผ์ดํธ๋ ๋ถ๋ถ์ด ์ ์ธ๋ ๋ฌธ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
3๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ 2๋ฒ ์ด์ ์ฐ์๋ ๋ถ๋ถ์ ํ๋์ ๋ง์นจํ(.)๋ก ์นํํด์ผ ํ๋ฏ๋ก, ์ ๊ท์์ ์จ์ค๋ค.
id.replace(/[.]{2,}/g, "."); ๋ก ์จ์ฃผ๊ฑฐ๋, id.replace(/\.+/g, ".")๋ก ๋ชจ๋ ๋ง์นจํ(.)๋ฅผ ๋ง์นจํ ํ๋๋ก ๋ฐ๊พธ๋ ๋ฐฉ์์ผ๋ก ์จ์ค ์๋ ์๊ฒ ๋ค.
์ง์ ํ ๊ธธ์ด์ ๋ฌธ์์ด์ ์ฐพ์ ๋๋ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. {min, max} ์ฆ, ์ต์ ๋ฌธ์์ด ๊ธธ์ด์ ์ต๋ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๊ฐ๊ฐ ๋ช ์ํ ์ ์๊ณ , ์ต์ ๊ธธ์ด๋ ์ต๋ ๊ธธ์ด๋ง ์ง์ ํ๊ณ ์ ํ ๋๋ ์ผ์ชฝ ๊ทธ๋ฆผ์ฒ๋ผ ์ผํ๋ก ๊ตฌ๋ถํ๊ณ ์๋ฆฌ๋ฅผ ๋จ๊ฒจ๋๋ฉด๋๋ค.
๋ฐ๋ผ์ ์ผ์ชฝ ์ ๊ท์์ ์ต์ 2๊ฐ ์ด์์ ๋ง์นจํ๋ฅผ ์ฐพ๋๋ค.
๋๋ {1,}๊ณผ ๋์ผํ ์ญํ ์ ํ๋ +(๋ํ๊ธฐ ๊ธฐํธ) quantifier๋ฅผ ์ฌ์ฉํด๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
4๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ ์ฒ์์ด๋ ๋์ ์์นํ๋ค๋ฉด ์ ๊ฑฐํ๋ค. ์ด๋ ๋ฌธ์์ด์ด ๋น ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ํด, ๊ทธ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก 5๋จ๊ณ๋ก ๋์ด๊ฐ ์ ์๋๋ก ๋ถ๊ธฐํด์คฌ๋ค. ๋ฌธ์์ด ๊ธธ์ด๊ฐ 0์ด์์ผ ๊ฒฝ์ฐ id[0] id์ ์ฒซ ๋ฒ์งธ ๊ธ์๊ฐ ๋ง์นจํ์ ๋์ผํ๋ค๋ฉด, id.substring(1)์ผ๋ก, 0๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ง์ง๋ง ๊ธ์๊ฐ ๋ง์นจํ์ ๋์ผํ๋ค๋ฉด, id.slice(0, -1)๋ก ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํ๋ค. slice ๋ฉ์๋์ ๋ ๋ฒ์งธ ์ธ์๋ฅผ -1๋ก ํํํ๋๋ฐ ์ด๋, id.length - 1๊ณผ ๋์ผํ๋ค.
๊ทธ ํ 5๋จ๊ฒ์์๋ ๋น ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ ๋ฌธ์์ด "a"๋ฅผ ์ถ๊ฐํด์ค๋ค. ๋น ๋ฌธ์์ด์ ์ ๊ท์์ผ๋ก ํํํด๋ ๋๋ค.
console.log(" ".replace(/^\s+$|^$/gi, "a")); // a
console.log("".replace(/^\s+$|^$/gi, "a")); // a
6๋จ๊ณ new_id์ ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฉด, new_id์ ์ฒซ 15๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค. ๋ง์ฝ ์ ๊ฑฐ ํ ๋ง์นจํ(.)๊ฐ new_id์ ๋์ ์์นํ๋ค๋ฉด ๋์ ์์นํ ๋ง์นจํ(.) ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
๋ฌธ์์ด์ด 16์ด์์ธ ๊ฒฝ์ฐ์๋ง 6๋จ๊ณ๋ฅผ ์ํํ๋๋ก ๋ถ๊ธฐํ๊ณ , id๋ slice() ๋ฉ์๋๋ก ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ ํํ๋ค. ๋ง์ง๋ง ๊ธ์๊ฐ ๋ง์นจํ์ธ ๊ฒฝ์ฐ๋ 4๋จ๊ณ์์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๋ฐ๋ณตํด ์ฌ์ฉํ๋ค.
๋ง์ง๋ง ๋จ๊ณ์์๋ ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, new_id์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ new_id์ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์ ๋๋ค.
๋์ ๊ฒฝ์ฐ์๋ while ๋ฐ๋ณต๋ฌธ์ผ๋ก += ์ฐ์ฐ์๋ก id์ ๋ง์ง๋ง ๊ธ์๋ฅผ ์ด์ด์ฃผ๋๋ก ํ๋๋ฐ, ๋ค๋ฅธ ํ์ด๋ฅผ ๋ณด๋ repeat ๋ฉ์๋๋ padEnd ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์๋ค.
// repeat()
id + id[id.length - 1].repeat(3-id.length);
// padEnd()
id.padEnd(3, id[id.length - 1]);
repeat() ๋ฉ์๋๋ ๋ฌธ์์ด์ ์ฃผ์ด์ง ํ์๋งํผ ๋ฐ๋ณตํด ๋ถ์ธ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํ๋ค. str.repeat(count) ์์ count ํ๋ผ๋ฏธํฐ๋ ๋ฌธ์์ด์ ๋ฐ๋ณตํ ํ์๋ฅผ ์ ๋ ฅํ๋ค.
padEnd() ๋ฉ์๋๋ ํ์ฌ ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด์ ์ฑ์ ์ฃผ์ด์ง ๊ธธ์ด๋ฅผ ๋ง์กฑํ๋ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํ๋ค. ๋์ ๋ฌธ์์ด์ ์ฐ์ธก๋ถํฐ ์ ์ฉ๋๋ค.