๐ก ์ฐ๋ฉด ํธํ์ง๋ง, ์์ฃผ ์์จ์ ์ ๊น๋จน๋ ์ ๊ทํํ์์ ๋ํด ์ ๋ฆฌํด๋ณด์!
์ฌ์ค ์ด๋ ๊ฒ ์ ๋ฆฌํ๊ฒ ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ์ ํ๋ค ์ ๊ทํํ์์ ์ด์ฉํ๋ฉด ๊ต์ฅํ ํธ๋ฆฌํด์ง๋ ๋ฌธ์ ๋ฅผ ๋ง๋๊ฒ ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ํด๋น ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ณ ์ ํ๋ค.
์ ๊ทํํ์ ๋ด์ฉ์ ๋ํด์๋ ์๋ ๋งํฌ, mdn์์ ์ ๋ง ๋ง์ ๋์์ ์ป์๋ค.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
์ ๊ทํํ์์ ์ค์ ์ฌ์ฉ
//์ ๊ทํํ์ ์ฌ์ฉ.
function solution(new_id) {
const answer = new_id
.toLowerCase()
//์์ด์๋ฌธ์, ์ซ์0-9, ํน์๋ฌธ์ '.', '_', '-'๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์์ค๋ค.
.replace(/[^a-z0-9._-]/g, "")
//ํน์๋ฌธ์ '.'์ด 2๊ฐ ์ด์ ๋ฐ๋ณต๋๋ค๋ฉด, ํด๋น ๋ถ๋ถ์ '.'ํ๋๋ก ๋ฐ๊พผ๋ค.
.replace(/\\.{2,}/g, ".")
//์ฒซ ์์์ด '.'์ด๊ฑฐ๋, '.'์ผ๋ก ๋๋๊ฒ ๋๋ค๋ฉด, '.'์ ์ญ์ ํ๋ค.
.replace(/^\\.|\\.$/g, "")
//๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 1์ด์์ด ๋ ๋๊น์ง 'a'๋ฅผ ๋ฐ๋ณตํด ๋ฃ๋๋ค.
.padEnd(1, 'a')
.slice(0, 15)
//๋ฌธ์์ด์ ๋ง์ง๋ง๊ธ์๊ฐ .์ด๋ผ๋ฉด, ์ญ์ ํ๋ค.
.replace(/\\.$/g, "")
//๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 3์ดํ๋ผ๋ฉด, ๋ฌธ์์ด ๋ง์ง๋ง ๊ธ์๋ฅผ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ํด์ค๋ค.
return answer.padEnd(3, answer[answer.length-1]);
}
Flag์ ์ข ๋ฅ
- g: Global์ ์๋ฏธํ๋ฉฐ, ๋ฌธ์์ด ๋ด์ ๋ชจ๋ ํจํด์ ์ฐพ๊ฒ ๋๋ค. ์ฆ, ํจํด์ ๋ง์กฑํ๋ ์ฌ๋ฌ๊ฐ์ ๋ฌธ์์ด์ด ์๋ค๊ณ ํ๋ฉด, ์ฌ๋ฌ ๋ฌธ์์ด ๋ชจ๋ ์ฐพ๊ฒ ๋๋ค. ๊ฐ์ฅ ์์ฃผ ์ฐ๊ฒ ๋๋ Flag์ด๋ค.
- i: Ignore Case, ๋ฌธ์์ด์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
- m: Multi Line, ๋ฌธ์์ด์ ํ์ด ๋ฐ๋์ด๋ ์ฐพ๋๋ค.
ํํ์
[abc] | any of a, b, or c ์ฆ, a ๋๋ b ๋๋ c๋ฅผ ์ฐพ๋๋ค. |
[^abc] | not a, b, or c ์ฆ, a๋, b๋ c๋ ์๋ ๊ฒ๋ค์ ์ฐพ๋๋ค. |
[a-z] | ์์ด ์๋ฌธ์ a๋ถํฐ z๊น์ง ํด๋นํ๋ ๊ฒ๋ค์ ์ฐพ๋๋ค. |
^a | a๋ฌธ์๋ก ์์ํจ์ ์๋ฏธํ๋ค. ๋ฌธ์์ด ๊ฐ์ฅ ์์ ์๋ a๋ฅผ ์ฐพ๊ฒ ๋๋ค. |
a$ | ๋ฌธ์์ด์ ์ข ๋ฃ๋ฅผ ์๋ฏธ. ๋ฌธ์์ด ๊ฐ์ฅ ๋ค์ ์๋ a๋ฅผ ์ฐพ๊ฒ ๋๋ค. |
a+ | a๋ผ๋ ๋ฌธ์๊ฐ ํ๋ฒ์ด์ ํฌํจ๋๋ ๊ฒ์ ์ฐพ๊ฒ ๋๋ค. e.g. a, aa, aaa,... |
a{n} | a๋ผ๋ ๋ฌธ์๊ฐ n๋ฒ ๋ฐ๋ณต๋จ์ ์๋ฏธํ๋ค. |
a{n,} | a๋ผ๋ ๋ฌธ์๊ฐ n๋ฒ ์ด์ ๋ฐ๋ณต๋จ์ ์๋ฏธํ๋ค. |
a{n,m} | a๋ผ๋ ๋ฌธ์๊ฐ n๋ฒ ์ด์ m๋ฒ์ดํ๋ก ๋ฐ๋ณต๋จ์ ์๋ฏธํ๋ค. |
\ | ์ด์ค์ผ์ดํ๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ค์์ค๋ ๋ฌธ์๋ฅผ ๋ฌธ์๊ทธ๋๋ก ๋ณด๊ฒ ๋ค๋ ๋ป์ด๋ค. |
\^ | ๋ฌธ์ "^"๋ฅผ ์ฐพ๊ฒ ๋๋ค. ์ฆ, ์ฌ๊ธฐ์ ^๋ not์ด๋ ๋ฌธ์์ด ์์์ ์๋ฆฌ์ง ์๋๋ค. |
\w | ๋ฐ์ค ๋ฌธ์๋ฅผ ํฌํจํ ์์ซ์ ๋ฌธ์์ ๋์๋๋ค. [A-Za-z0-9_] ์ ๋์ผํ๋ค |
\W | ๋จ์ด ๋ฌธ์๊ฐ ์๋ ๋ฌธ์์ ๋์๋๋ค.. [^A-Za-z0-9_] ์ ๋์ผํ๋ค. |
\d | ์ซ์ ๋ฌธ์์ ๋์๋๋ค. [0-9]์ ๋์ผํ๋ค. |
\D | ์ซ์ ๋ฌธ์๊ฐ ์๋ ๋ฌธ์์ ๋์๋๋ค. [^0-9]์ ๋์ผํ๋ค. |
์ฌ์ฉ๋ฒ
I. Boolean๊ฐ์ ์ํ ๋: test
**/regex/.test(string)**๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ด๊ฐ ์ํ๋ ๊ฐ์ด ํด๋น ๋ฌธ์์ด์ ํฌํจ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค. e.g. /[^a-z0-9]/.test('ํasdf123c9') ⇒ 'ํ'์ด๋ผ๋ ๊ธ์๊ฐ ํฌํจ ๋์ด ์์ผ๋ฏ๋ก true๊ฐ ๋์จ๋ค.
II. ๋์ํ๋ ๋ฌธ์์ด์ ์ฐพ์์, ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๊ณ ์ถ์๋: replace
[string].replace(/regex/, '๋ค๋ฅธ ๋ฌธ์์ด') ํ์์ผ๋ก ์ด์ฉํ ์ ์๋ค.
e.g. 'applpe'.replace(/p{2}/, 'b') ⇒p๊ฐ ๋๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ 'b'๋ก ๋ฐ๊พธ๊ฒ ๋ค๋ ๋ป์ด๋ค. ⇒ "ablpe"์ด ์ถ๋ ฅ๋๊ฒ ๋๋ค.
๋ง์ฝ์, ๋ด๊ฐ ์ฐพ์ ๋ฌธ์์ด ์๋ค๋ก ๊ณต๋ฐฑ์ ์ถ๊ฐ ํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น???
⇒ $& ์ ์ฌ์ฉํ๋ฉด ๋๋ค!
let str = "100-200*300-500+20"
let test = str.replace(/[\\+\\-\\*]/g, " $& ")
console.log(test)
//"100 - 200 * 300 - 500 + 20"๊ฐ ๋์ค๊ฒ ๋๋ค.
//์ฌ๊ธฐ์, $&๋ ๋ด๊ฐ ์ฐพ์ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ์๋ฏธํ๊ฒ ๋๋ค.
โ
III. ๋ณ์๋ฅผ ์ด์ฉํด ์ ๊ทํํ์์ ๋์ ์ผ๋ก ์ด์ฉํ๊ณ ์ถ๋ค๋ฉด? : new RegExp
RegExp ๊ฐ์ฒด๋ฅผ ํตํด ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ๊ณผ ์์ฑ์๋ก์จ ์์ฑํ ์ ์๋ค.
- ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ: new RegExp(/ab+c/, 'g')
- ์์ฑ์ ํ๊ธฐ๋ฒ: new RegExp('ab+c', 'g')
์ ๊ทํํ์์ด ๋ณํ์ง ์๊ณ , ์ ์ ์ธ ํ์ ์ผ ๋ ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๊ณ , ์ ๊ทํํ์ ์ธ๋ถ์์ ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ํจํด์ด ๋ณํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ, ์์ฑ์ ํ๊ธฐ๋ฒ์ ์ด์ฉํ๋ฉด ๋๋ค.
function solution(s) {
let table = [
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
];
for (let i = 0; i < table.length; i++) {
//์์ฑ์ ํ๊ธฐ๋ฒ์ ํตํด, ์ ๊ทํํ์์ ์์ฑํ๊ณ ๋์ ์ผ๋ก ๋ฐ๊พธ์ด ๊ฐ๋ฉฐ ์ด์ฉํ๋ ๋ฐฉ์
s = s.replace(new RegExp(`${table[i]}`, "g"),i);
}
return Number(s);
}
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
json [object Object] ์ถ๋ ฅ (0) | 2022.04.13 |
---|---|
new Set์ผ๋ก ๋ฐฐ์ด ์ค๋ณต๊ฐ ์ ๊ฑฐ(with ํผํฌ๋จผ์ค ํ ์คํธ) (0) | 2022.04.11 |
[ES6] Map vs Set (0) | 2022.04.11 |
๋ ์ง ํธ๋ฆฌํ๊ฒ ๊ณ์ฐํ๊ธฐ(feat. dayjs) (0) | 2022.04.11 |
๊น์ ๋ณต์ฌ vs ์์ ๋ณต์ฌ (0) | 2022.04.09 |