๐ ์ ๊ท ํํ์์ด๋?
๋ฌธ์์ด์ ๋์์ผ๋ก ํจํด ๋งค์นญ ๊ธฐ๋ฅ์ ์ ๊ณต = ํน์ ํจํด๊ณผ ์ผ์นํ๋ ๋ฌธ์์ด์ ๊ฒ์ or ์ถ์ถ or ์นํํ๋ ๊ธฐ๋ฅ
const tel = 010-1234-5678;
const regExp = /^\d{3}-\d{4}-\d{4}/;
// tel์ด ์กฐ๊ฑด์ ๋ง๋์ง ํ
์คํธ
regExp.test(tel); // true
๐จ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
1. ์ ๊ทํํ์ ๋ฆฌํฐ๋ด
→ ํจํด๊ณผ ํ๋๊ทธ๋ก ๊ตฌ์ฑ
const target1 = 'Is this all there is?';
const target2 = 'Is this all?';
// ํจํด: is
// ํ๋๊ทธ: i => ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ง ์๊ณ ๊ฒ์
const regexp = /is/i;
regexp.test(target1); // true
regexp.test(target2); // true
2. RegExp ์์ฑ์ ํจ์
new RegExp(pattern[, flags])
// RegExp ์์ฑ์ ํจ์ ์ฌ์ฉ ์์
const target = 'Is this all there is?';
const regexp = new RegExp(/is/i);
regexp.test(target); // true
// ๋์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
const count = (str, char) => (str.match(new RegExp(char, 'gi')) ?? []).length; // gi๋ ๋ฌธ์์ด ์ ์ฒด์์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์ํ๊ณ
count('Is this all there is?', 'is') // 3 -> is๊ฐ Is์ ํ๋, this์ ํ๋, ๋ง์ง๋ง์ ํ๋
count('Is this all there is?', 'xx') // 0 -> xx๋ ์์
๐ฎRegExp์ ๋ฉ์๋๋ค
1. exec ๋ฉ์๋
์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ๋ํด ํจํด์ ๊ฒ์ํด์ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํ, ์์ผ๋ฉด null ๋ฐํ
๋ชจ๋ ํจํด์ ๊ฒ์ํ๋ g ํ๋๊ทธ๋ก ํด๋ ๋ฌด์กฐ๊ฑด ์ฒซ๋ฒ์งธ ๋งค์นญ ๊ฒฐ๊ณผ๋ง์ ๋ฐํํจ!!!
const target = 'Is this all ther is?'
const regExp = /is/i
console.log(regExp.exec(target))
// ๊ฒฐ๊ณผ๊ฐ
[
0: "Is", // ๋งค์น๋ ๋ฌธ์์ด ์ ์ฒด
index: 0, // ๋งค์น๊ฐ ๋ฐ๊ฒฌ๋ ์์ ์ธ๋ฑ์ค ์์น
input: "Is this all ther is?", // ๊ฒ์์ด ์ํ๋ ์๋ณธ ๋ฌธ์์ด
groups: undefined // ์ ๊ท์์์ ์บก์ฒ ๊ทธ๋ฃน์ด ์์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ ์ฅ๋จ
]
2. test ๋ฉ์๋
์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ๋ํด ํจํด์ ๊ฒ์ํด์ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ boolean์ผ๋ก ๋ฐํ
const target = 'Is this all ther is?'
const regExp = /is/i
console.log(regExp.test(target)) // true
3. match ๋ฉ์๋(String์ ๋น๋์ธ ๊ฐ์ฒด → ๋ฌธ์์ด์ ๋ถ์ฌ์ ์จ์ผํจ)
๋์ ๋ฌธ์์ด๊ณผ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ๊ท ํํ์๊ณผ์ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํ
const target = 'Is this all there is?'
const regexp = /is/
console.log(target.match(regexp))
// ๊ฒฐ๊ณผ๊ฐ
[
0: "is", // ๋งค์น๋ ๋ฌธ์์ด
index: 5, // ๋งค์น๊ฐ ๋ฐ๊ฒฌ๋ ์์น (this์ 'is')
input: "Is this all there is?", // ์๋ณธ ๋ฌธ์์ด
groups: undefined // ์บก์ฒ ๊ทธ๋ฃน ๊ฒฐ๊ณผ (์ฌ๊ธฐ์๋ ์ฌ์ฉํ์ง ์์)
]
exec ๋ฉ์๋์ ๋น์ทํ๊ฒ ๋ฐํ๋์ง๋ง, ๋ค๋ฅธ์ ์ g ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํจ
const regexp = /is/g; // g ํ๋๊ทธ ์ถ๊ฐ
console.log(target.match(regexp));
// ๊ฒฐ๊ณผ: ["is", "is"] - 'this'์ ๋ง์ง๋ง 'is'์ ๋ ๊ฐ๊ฐ ๋ฐฐ์ด๋ก ๋ฐํ
๐ฉํ๋๊ทธ
์ ๊ท ํํ์์์ ๊ฒ์ ๋ฐฉ์์ ์ค์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋จ
- ํ์๊ฐ ์๋
- ์์ ์๊ด ์์ด ์ฌ๋ฌ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
- ํ๋๊ทธ๊ฐ ์๋ค๋ฉด ๋์๋ฌธ์ ๊ตฌ๋ณ๋จ + ์ฒซ๋ฒ์งธ ๋งค์นญ ๋์์ด ๊ฒ์๋๋ฉด ์ข ๋ฃ
๐งฉํจํด
์ผ์ ํ ๊ท์น์ ํํํ๊ธฐ ์ํด ์ฌ์ฉ๋จ
- /๋ก ์ด๊ณ ๋ซ์ผ๋ฉฐ ๋ฐ์ดํ๋ ์๋ต
- ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๋ฉํ๋ฌธ์ or ๊ธฐํธ๋ก ํํ ๊ฐ๋ฅ
์์์ ๋ฌธ์์ด ๊ฒ์
์ ํ๋(.) = ์์์ ๋ฌธ์ ํ๊ฐ
const target = 'Is this all there is?'
const regexp = /.../g
// ์์์ 3๊ฐ์ ๋ฌธ์๋ฅผ ๋์๋ฌธ์ ๊ตฌ๋ณํด์ ์ ์ญ ๊ฒ์
target.match(regexp) // ['Is ', 'thi', 's a', 'll ', 'the', 're ', 'is?']
๋ฐ๋ณต ๊ฒ์
(1) {m,n}์ ์์ ํจํด์ด ์ต์ m๋ฒ, ์ต๋ n๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด
- ์ฌ๊ธฐ์ {m, n}์ด๋ฐ์์ผ๋ก ์ค๊ฐ์ ๋์ด์ฐ๊ธฐํ๋ฉด ๋์ ์ํจ
- {n} ์ด๋ ๊ฒ ํ๋๋ง ์์ผ๋ฉด {n,n}๊ณผ ๋์ผ
- {n,} ์ด๋ ๊ฒ ๋ค์๊ฐ ์๋ต๋์ด ์์ผ๋ฉด {1,∞}์ ๋์ผ = ์ต์ n๋ฒ
const target = 'A AA B BB Aa Bb AAA'
const regExp = /A{1,2}/g
// A๊ฐ ์ต์ 1๋ฒ, ์ต๋ 2๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด ์ ์ญ ๊ฒ์
target.match(regExp) // ['A', 'AA', 'A', 'AA', 'A']
(2) +๋ ์์ ํจํด์ด ์ต์ ํ๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด
์ฆ, +๋ {1,}๊ณผ ๊ฐ๋ค.
const target = 'A AA B BB Aa Bb AAA'
const regExp = /A+/g
// A๊ฐ ์ต์ 1๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด ์ ์ญ ๊ฒ์
target.match(regExp) // ['A', 'AA', 'A', 'AAA']
(3) ?๋ ์ต๋ ํ๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด
์ฆ, ?๋ {0,1}๊ณผ ๋์ผํจ
const target = 'color colour colouur'
// colo๊น์ง๋ ์์ด์ผํ๊ณ , u๋ ์ต๋ ํ๋ฒ(์์ด๋ ๋จ), r์ด ์์ด์ผํจ
const regExp = /colou?r/g
target.match(regExp) // ['color', 'colour']
OR ๊ฒ์
- | ์ฌ์ฉ
- [ ] ์ฌ์ฉ
const target = 'A AA B BB Aa Bb'
// ์ ์ญ์์ A ๋๋ B ๊ฒ์
const regExp1 = /A|B/g
target.match(regExp1) // ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'B']
// ๋ถํด ์ํ๊ณ ๊ฒ์ํ๋ ค๋ฉด +๋ฅผ ํจ๊ป ์ฌ์ฉ
const regExp2 = /A+|B+/g
target.match(regExp2) // ['A', 'AA', 'B', 'BB', 'A', 'B']
// ๊ทผ๋ฐ 2๋ฒ์ []๋ฅผ ์ด์ฉํด์ ์ด๋ ๊ฒ๋ ์ธ ์ ์์
const regExp3 = /[AB]+/g
target.match(regExp3) // ['A', 'AA', 'B', 'BB', 'A', 'B']
// ๋ง์ฝ ๋ฒ์๋ฅผ ์ง์ ํ๊ณ ์ถ์ผ๋ฉด []์์ -๋ฅผ ์ฌ์ฉ
const regExp4 = /[A-Z]+/g
// ์ด ๊ฒฝ์ฐ์ ๋๋ฌธ์ ์ํ๋ฒณ ๊ฒ์
target.match(regExp4) // ['A', 'AA', 'B', 'BB', 'A', 'B']
// ๋์๋ฌธ์ ๊ตฌ๋ณ ์ํ ๋ ค๋ฉด ์ด๋ ๊ฒ
const regExp5 = /[A-Za-z]+/g
target.match(regExp5) // ['A', 'AA', 'B', 'BB', 'Aa', 'Bb']
// ์ด๊ฑธ ํ์ฉํด์ ์ซ์๋ ๊ฐ๋ฅ
const newTarget = 'AA BB 12,345'
const regExp6 = /[0-9]+/g
newTarget.match(regExp6) // ['12', '345']
[A-Z], [0-9]์ด๋ ๊ฒ ์ผ์ผํ ์จ์ฃผ๋ ๋์ , \d, \w๋ฑ์ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ์ธ ์๋ ์์
const target = 'AA BB 12,345'
// \d๋ ์ซ์
const regExp1 = /[\d,]+/g // ์ซ์ ๋๋ ','๊ฐ ํ๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด
target.match(regExp1) // ['12,345']
// \D๋ ์ซ์๊ฐ ์๋ ๋ฌธ์
const regExp2 = /[\D,]+/g
target.match(regExp2) // ['AA BB ', ',']
// \w๋ ์ํ๋ฒณ, ์ซ์, ์ธ๋์ค์ฝ์ด [A-Za-z0-9_]์ ๊ฐ์
const regExp3 = /[\w,]+/g
target.match(regExp3) // ['AA', 'BB', '12,345']
// \W๋ \w์ ๋ฐ๋
const regExp4 = /[\W,]+/g
target.match(regExp4) // [' ', ' ', ',']
NOT๊ฒ์
[ ] ์์์์ ^๋ not์ ์๋ฏธํจ(ex. [^0-9]๋ ์ซ์๋ฅผ ์ ์ธํ ๋ฌธ์)
const target = 'AA BB 12 Aa Bb'
// ์ซ์ ์ ์ธ ๊ฒ์
const regExp = /[^0-9]+/g
target.match(regExp) // ['AA BB ', ' Aa Bb']
์์ ์์น๋ก ๊ฒ์
[ ] ๋ฐ์์์ ^๋ ๋ฌธ์์ด์ ์์
const target = 'https://memezz.tistory.com'
const regExp = /^https/g
regExp.test(target) // true
๋ง์ง๋ง ์์น๋ก ๊ฒ์
$๋ ๋ฌธ์์ด์ ๋ง์ง๋ง์ ์๋ฏธ
const target = 'https://memezz.tistory.com'
const regExp = /com$/g
regExp.test(target) // true
'FrontEnd > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ์ด๋ฒคํธ (1) | 2025.02.04 |
---|---|
[JS] Set๊ณผ Map (0) | 2024.12.22 |
[Javascript] ํ๋กํ ํ์ (2) ํ๋กํ ํ์ ๊ฐ์ฒด (1) | 2024.11.10 |
[Javascript] ํ๋กํ ํ์ (1) ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์์ (0) | 2024.11.09 |
[Javascript] ์ผ๊ธ ๊ฐ์ฒด, ํจ์์ ํ๋กํผํฐ (0) | 2024.10.27 |