๐Ÿ‘ฉ‍๐Ÿ’ป/JavaScript

[Programmers] ์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœํ•˜๊ธฐ (JavaScript/์ •๊ทœ์‹)

ํ•œ๋‚˜ 2021. 1. 29. 20:20

๋ฌธ์ œ

์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœ ๋ฌธ์ œ. 

 

์นด์นด์˜ค์— ์ž…์‚ฌํ•œ ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๋„ค์˜ค๋Š” ์นด์นด์˜ค๊ณ„์ •๊ฐœ๋ฐœํŒ€์— ๋ฐฐ์น˜๋˜์–ด, ์นด์นด์˜ค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•˜๋Š” ์œ ์ €๋“ค์˜ ์•„์ด๋””๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋„ค์˜ค์—๊ฒŒ ์ฃผ์–ด์ง„ ์ฒซ ์—…๋ฌด๋Š” ์ƒˆ๋กœ ๊ฐ€์ž…ํ•˜๋Š” ์œ ์ €๋“ค์ด ์นด์นด์˜ค ์•„์ด๋”” ๊ทœ์น™์— ๋งž์ง€ ์•Š๋Š” ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ์ž…๋ ฅ๋œ ์•„์ด๋””์™€ ์œ ์‚ฌํ•˜๋ฉด์„œ ๊ทœ์น™์— ๋งž๋Š” ์•„์ด๋””๋ฅผ ์ถ”์ฒœํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์นด์นด์˜ค ์•„์ด๋””์˜ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.
  • ์•„์ด๋””์˜ ๊ธธ์ด๋Š” 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์— ํ•˜์ด๋ผ์ดํŠธ๋œ ๋ถ€๋ถ„์ด ์ œ์™ธ๋  ๋ฌธ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

\w๋Š” ๋ผํ‹ด ๋ฌธ์ž๋‚˜ ์ˆซ์ž, ๋ฐ‘์ค„์„ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž ํด๋ž˜์Šค์ด๋‹ค.

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() ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ๋ฌธ์ž์—ด์— ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ์ฑ„์›Œ ์ฃผ์–ด์ง„ ๊ธธ์ด๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋Œ€์ƒ ๋ฌธ์ž์—ด์˜ ์šฐ์ธก๋ถ€ํ„ฐ ์ ์šฉ๋œ๋‹ค.