[Programmers] μ κ· μμ΄λ μΆμ²νκΈ° (JavaScript/μ κ·μ)
λ¬Έμ
μ κ· μμ΄λ μΆμ² λ¬Έμ .
μΉ΄μΉ΄μ€μ μ μ¬ν μ μ κ°λ°μ λ€μ€λ μΉ΄μΉ΄μ€κ³μ κ°λ°νμ λ°°μΉλμ΄, μΉ΄μΉ΄μ€ μλΉμ€μ κ°μ νλ μ μ λ€μ μμ΄λλ₯Ό μμ±νλ μ 무λ₯Ό λ΄λΉνκ² λμμ΅λλ€. λ€μ€μκ² μ£Όμ΄μ§ 첫 μ 무λ μλ‘ κ°μ νλ μ μ λ€μ΄ μΉ΄μΉ΄μ€ μμ΄λ κ·μΉμ λ§μ§ μλ μμ΄λλ₯Ό μ λ ₯νμ λ, μ λ ₯λ μμ΄λμ μ μ¬νλ©΄μ κ·μΉμ λ§λ μμ΄λλ₯Ό μΆμ²ν΄μ£Όλ νλ‘κ·Έλ¨μ κ°λ°νλ κ²μ λλ€.
λ€μμ μΉ΄μΉ΄μ€ μμ΄λμ κ·μΉμ λλ€.
- μμ΄λμ κΈΈμ΄λ 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() λ©μλλ νμ¬ λ¬Έμμ΄μ λ€λ₯Έ λ¬Έμμ΄μ μ±μ μ£Όμ΄μ§ κΈΈμ΄λ₯Ό λ§μ‘±νλ μλ‘μ΄ λ¬Έμμ΄μ λ°ννλ€. λμ λ¬Έμμ΄μ μ°μΈ‘λΆν° μ μ©λλ€.