
์ ๊ทํํ์(Regular Expression, ์ค์ฌ์ RegEx)์ ๋ฌธ์์ด์์ ํน์ ํจํด์ ์ฐพ๊ฑฐ๋ ๋งค์นญํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ํ ์คํธ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ, ๋ฌธ์์ด ํ์ฑ ๋ฑ ๋ค์ํ ์์ ์ ํ์ฉ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทํํ์์ ์์ฑํ ์ ์์ต๋๋ค.
// ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ
const regex = /pattern/;
// RegExp ๊ฐ์ฒด ์์ฑ์
const regex = new RegExp("pattern");
๊ธฐ๋ณธ ๋ฌธ๋ฒ
๋ฆฌํฐ๋ด ๋ฌธ์
์ผ๋ฐ ํ ์คํธ ๋ฌธ์๋ก, ๊ทธ๋๋ก ๋งค์นญ๋ฉ๋๋ค.
const regex = /Yundogi/;
regex.test("Yundogi Dev"); // true
๋ฉํ ๋ฌธ์
ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ฌธ์๋ค์ ๋๋ค.
.
: ์์์ ํ ๋ฌธ์^
: ๋ฌธ์์ด์ ์์$
: ๋ฌธ์์ด์ ๋*
* : 0ํ ์ด์ ๋ฐ๋ณต+
: 1ํ ์ด์ ๋ฐ๋ณต?
: 0ํ ๋๋ 1ํ\
: ์ด์ค์ผ์ดํ ๋ฌธ์
const regex = /^y.ndogi$/;
regex.test("yundogi"); // true
regex.test("yondogi"); // true
regex.test("yundogi hi"); // false
const regex2 = /^y.*i$/;
regex.test("yundogi hi"); // true
๋ฌธ์
๋๊ดํธ []
๋ก ๋ฌถ์ด ํํํฉ๋๋ค.
[abc\]
: a, b, c ์ค ํ๋์ ๋งค์นญ[^abc\]
: a, b, c๋ฅผ ์ ์ธํ ๋ฌธ์์ ๋งค์นญ[a-z\]
: a๋ถํฐ z๊น์ง์ ์๋ฌธ์์ ๋งค์นญ[A-Z\]
: A๋ถํฐ Z๊น์ง์ ๋๋ฌธ์์ ๋งค์นญ[0-9\]
: 0๋ถํฐ 9๊น์ง์ ์ซ์์ ๋งค์นญ
const regex = /[aeiou]/;
regex.test("yundogi"); // true
regex.test("sky"); // false
์ฝ์ด ๋ฌธ์
์์ฃผ ์ฌ์ฉ๋๋ ๋ฌธ์ ํด๋์ค์ ๋ํ ์ฝ์ด์ ๋๋ค.
\d
: ์ซ์ ([0-9]์ ๋์ผ)\D
: ์ซ์๊ฐ ์๋ ๋ฌธ์ ([^0-9]์ ๋์ผ)\w
: ๋จ์ด ๋ฌธ์ ([A-Za-z0-9_]์ ๋์ผ)\W
: ๋จ์ด ๋ฌธ์๊ฐ ์๋ ๋ฌธ์\s
: ๊ณต๋ฐฑ ๋ฌธ์ (์คํ์ด์ค, ํญ, ์ค๋ฐ๊ฟ ๋ฑ)\S
: ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์๋ ๋ฌธ์
const regex = /\d{3}-\d{3}-\d{4}/;
regex.test("123-456-7890"); // true
regex.test("abc-def-ghij"); // false
ํ๋๊ทธ
์ ๊ท์์ ๋์ ๋ฐฉ์์ ์์ ํ๋ ์ต์
์
๋๋ค. ์ฌ๋ฌ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ค์ ์ ๊ท์ ๋ฆฌํฐ๋ด์ ๋์ด๋ RegExp
๊ฐ์ฒด์ ์์ฑ์์ ๋ ๋ฒ์งธ ์ธ์๋ก ์ง์ ํ ์ ์์ต๋๋ค.
const regex = /yundogi/gi;
// or
const regex = new RegExp('yundogi', 'gi');
์์๋ ์ค์ํ์ง ์์ต๋๋ค.
g
(global): ์ ์ญ ๊ฒ์์ ์ํํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ผ์น ํ์๋ ๊ณ์ํด์ ๊ฒ์ํฉ๋๋ค.i
(ignore case): ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๊ฒ์ํฉ๋๋ค.m
(multiline): ์ฌ๋ฌ ์ค ๋ชจ๋๋ฅผ ํ์ฑํํฉ๋๋ค. ^์ $๊ฐ ๊ฐ ์ค์ ์์๊ณผ ๋์ ๋งค์นญ๋ฉ๋๋ค.s
(dotAll): ์ด ๊ฐํ ๋ฌธ์๋ฅผ ํฌํจํ ๋ชจ๋ ๋ฌธ์์ ๋งค์นญ๋๋๋ก ํฉ๋๋ค.u
(unicode): ์ ๋์ฝ๋ ์ฝ๋ ํฌ์ธํธ์ ์ํ์ค๋ก ๋ฌธ์์ด์ ์ฒ๋ฆฌํฉ๋๋ค.y
(sticky): "sticky" ๊ฒ์์ ์ํํฉ๋๋ค. ๋ฌธ์์ด์ ํ์ฌ ์์น์์๋ถํฐ๋ง ๊ฒ์ํฉ๋๋ค.
// ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ ์ญ ๊ฒ์
const regex1 = /hello/gi;
"Hello, hello, HELLO".match(regex1); // ["Hello", "hello", "HELLO"]
// ์ฌ๋ฌ ์ค ๋ชจ๋์์ ๊ฐ ์ค์ ์์ ๋ถ๋ถ ๊ฒ์
const regex2 = /^start/gm;
"start of line 1\nstart of line 2".match(regex2); // ["start", "start"]
// ์ ๋์ฝ๋ ์ด๋ชจ์ง ๊ฒ์
const regex3 = /\p{Emoji}/gu;
"I love coffee โ".match(regex3); // ["โ"]
์์ฃผ ์ฌ์ฉ๋๋ ํจํด
์ด๋ฉ์ผ ์ฃผ์
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
emailRegex.test("user@example.com"); // true
URL
const urlRegex = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
urlRegex.test("https://www.example.com"); // true
๋ ์ง ํ์ (YYYY-MM-DD)
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
dateRegex.test("2024-03-15"); // true
๋ฉ์๋
test()
: ํจํด๊ณผ ์ผ์นํ๋์ง ํ์ธ (boolean ๋ฐํ)exec()
: ํจํด๊ณผ ์ผ์นํ๋ ๋ถ๋ถ์ ์ฐพ์ ๋ฐฐ์ด๋ก ๋ฐํmatch()
: ๋ฌธ์์ด ๋ฉ์๋, ์ผ์นํ๋ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํreplace()
: ํจํด๊ณผ ์ผ์นํ๋ ๋ถ๋ถ์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๊ต์ฒดsearch()
: ํจํด๊ณผ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค ๋ฐํ
const text = "Hello, my number is 123-456-7890.";
const phoneRegex = /\d{3}-\d{3}-\d{4}/;
phoneRegex.test(text); // true
phoneRegex.exec(text); // ["123-456-7890", index: 24, input: "Hello, my number is 123-456-7890.", groups: undefined]
text.match(phoneRegex); // ["123-456-7890"]
text.replace(phoneRegex, "XXX-XXX-XXXX"); // "Hello, my number is XXX-XXX-XXXX."
text.search(phoneRegex); // 24
๊ณ ๊ธ ๊ธฐ๋ฒ
๊ทธ๋ฃน๊ณผ ์บก์ฒ
๊ดํธ ()
๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน์ ๋ง๋ค๊ณ ์บก์ฒํ ์ ์์ต๋๋ค.
const regex = /(\d{3})-(\d{3})-(\d{4})/;
const match = regex.exec("My number is 123-456-7890");
console.log(match[1]); // "123"
console.log(match[2]); // "456"
console.log(match[3]); // "7890"
๋ฐฑ๋ ํผ๋ฐ์ค
์บก์ฒ๋ ๊ทธ๋ฃน์ ์ฐธ์กฐํ ๋ ์ฌ์ฉํฉ๋๋ค.
const regex = /(\w+)\s+\1/;
regex.test("hello hello"); // true
regex.test("hello world"); // false
ํ์
ํจํด์ ๋งค์นํ์ง๋ง ๊ฒฐ๊ณผ์ ํฌํจ์ํค์ง ์์ต๋๋ค.
- ๊ธ์ ์ ๋ฐฉํ์: (?=...)
- ๋ถ์ ์ ๋ฐฉํ์: (?!...)
- ๊ธ์ ํ๋ฐฉํ์: (?<=...)
- ๋ถ์ ํ๋ฐฉํ์: (?<!...)
const regex = /\d+(?=์)/;
console.log("5000์".match(regex)); // ["5000"]
const negativeRegex = /\d+(?!์)/;
console.log("5000๋ฌ๋ฌ".match(negativeRegex)); // ["5000"]
์์
๋น๋ฐ๋ฒํธ ๋ณต์ก์ฑ ๊ฒ์ฆ
function validatePassword(password) {
const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
return regex.test(password);
}
console.log(validatePassword("Abcd1234!")); // true
console.log(validatePassword("password123")); // false
HTML ํ๊ทธ ์ ๊ฑฐ
function stripHTMLTags(html) {
return html.replace(/<[^>]*>/g, '');
}
const html = "<p>Hello <strong>World</strong>!</p>";
console.log(stripHTMLTags(html)); // "Hello World!"
CSV ํ์ฑ
function parseCSV(csv) {
const rows = csv.split('\n');
return rows.map(row => {
return row.match(/(".*?"|[^",]+)(?=\s*,|\s*$)/g).map(cell => {
return cell.replace(/^"(.*)"$/, '$1');
});
});
}
const csv = `"Name","Age","City"
"John Doe",30,"New York"
"Jane Smith",25,"Los Angeles"`;
console.log(parseCSV(csv));
'๐ฅ Develop > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด ์ ๋ ฌํ๊ธฐ (0) | 2024.07.29 |
---|---|
[Javascript] Object.entries() ๋ฉ์๋ (0) | 2024.07.27 |
[Javascript] ์คํ๋ ๋(Spread) ์ฐ์ฐ์ (0) | 2024.07.26 |
[Javascript] ๋ฐ์ดํฐ ํ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ฐฉ์ (1) | 2024.07.24 |
[Javascript] ํด๋ก์ (Closure) (3) | 2024.07.20 |

์ ๊ทํํ์(Regular Expression, ์ค์ฌ์ RegEx)์ ๋ฌธ์์ด์์ ํน์ ํจํด์ ์ฐพ๊ฑฐ๋ ๋งค์นญํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ํ ์คํธ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ, ๋ฌธ์์ด ํ์ฑ ๋ฑ ๋ค์ํ ์์ ์ ํ์ฉ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทํํ์์ ์์ฑํ ์ ์์ต๋๋ค.
// ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ
const regex = /pattern/;
// RegExp ๊ฐ์ฒด ์์ฑ์
const regex = new RegExp("pattern");
๊ธฐ๋ณธ ๋ฌธ๋ฒ
๋ฆฌํฐ๋ด ๋ฌธ์
์ผ๋ฐ ํ ์คํธ ๋ฌธ์๋ก, ๊ทธ๋๋ก ๋งค์นญ๋ฉ๋๋ค.
const regex = /Yundogi/;
regex.test("Yundogi Dev"); // true
๋ฉํ ๋ฌธ์
ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ฌธ์๋ค์ ๋๋ค.
.
: ์์์ ํ ๋ฌธ์^
: ๋ฌธ์์ด์ ์์$
: ๋ฌธ์์ด์ ๋*
* : 0ํ ์ด์ ๋ฐ๋ณต+
: 1ํ ์ด์ ๋ฐ๋ณต?
: 0ํ ๋๋ 1ํ\
: ์ด์ค์ผ์ดํ ๋ฌธ์
const regex = /^y.ndogi$/;
regex.test("yundogi"); // true
regex.test("yondogi"); // true
regex.test("yundogi hi"); // false
const regex2 = /^y.*i$/;
regex.test("yundogi hi"); // true
๋ฌธ์
๋๊ดํธ []
๋ก ๋ฌถ์ด ํํํฉ๋๋ค.
[abc\]
: a, b, c ์ค ํ๋์ ๋งค์นญ[^abc\]
: a, b, c๋ฅผ ์ ์ธํ ๋ฌธ์์ ๋งค์นญ[a-z\]
: a๋ถํฐ z๊น์ง์ ์๋ฌธ์์ ๋งค์นญ[A-Z\]
: A๋ถํฐ Z๊น์ง์ ๋๋ฌธ์์ ๋งค์นญ[0-9\]
: 0๋ถํฐ 9๊น์ง์ ์ซ์์ ๋งค์นญ
const regex = /[aeiou]/;
regex.test("yundogi"); // true
regex.test("sky"); // false
์ฝ์ด ๋ฌธ์
์์ฃผ ์ฌ์ฉ๋๋ ๋ฌธ์ ํด๋์ค์ ๋ํ ์ฝ์ด์ ๋๋ค.
\d
: ์ซ์ ([0-9]์ ๋์ผ)\D
: ์ซ์๊ฐ ์๋ ๋ฌธ์ ([^0-9]์ ๋์ผ)\w
: ๋จ์ด ๋ฌธ์ ([A-Za-z0-9_]์ ๋์ผ)\W
: ๋จ์ด ๋ฌธ์๊ฐ ์๋ ๋ฌธ์\s
: ๊ณต๋ฐฑ ๋ฌธ์ (์คํ์ด์ค, ํญ, ์ค๋ฐ๊ฟ ๋ฑ)\S
: ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์๋ ๋ฌธ์
const regex = /\d{3}-\d{3}-\d{4}/;
regex.test("123-456-7890"); // true
regex.test("abc-def-ghij"); // false
ํ๋๊ทธ
์ ๊ท์์ ๋์ ๋ฐฉ์์ ์์ ํ๋ ์ต์
์
๋๋ค. ์ฌ๋ฌ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ค์ ์ ๊ท์ ๋ฆฌํฐ๋ด์ ๋์ด๋ RegExp
๊ฐ์ฒด์ ์์ฑ์์ ๋ ๋ฒ์งธ ์ธ์๋ก ์ง์ ํ ์ ์์ต๋๋ค.
const regex = /yundogi/gi;
// or
const regex = new RegExp('yundogi', 'gi');
์์๋ ์ค์ํ์ง ์์ต๋๋ค.
g
(global): ์ ์ญ ๊ฒ์์ ์ํํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ผ์น ํ์๋ ๊ณ์ํด์ ๊ฒ์ํฉ๋๋ค.i
(ignore case): ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๊ฒ์ํฉ๋๋ค.m
(multiline): ์ฌ๋ฌ ์ค ๋ชจ๋๋ฅผ ํ์ฑํํฉ๋๋ค. ^์ $๊ฐ ๊ฐ ์ค์ ์์๊ณผ ๋์ ๋งค์นญ๋ฉ๋๋ค.s
(dotAll): ์ด ๊ฐํ ๋ฌธ์๋ฅผ ํฌํจํ ๋ชจ๋ ๋ฌธ์์ ๋งค์นญ๋๋๋ก ํฉ๋๋ค.u
(unicode): ์ ๋์ฝ๋ ์ฝ๋ ํฌ์ธํธ์ ์ํ์ค๋ก ๋ฌธ์์ด์ ์ฒ๋ฆฌํฉ๋๋ค.y
(sticky): "sticky" ๊ฒ์์ ์ํํฉ๋๋ค. ๋ฌธ์์ด์ ํ์ฌ ์์น์์๋ถํฐ๋ง ๊ฒ์ํฉ๋๋ค.
// ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ ์ญ ๊ฒ์
const regex1 = /hello/gi;
"Hello, hello, HELLO".match(regex1); // ["Hello", "hello", "HELLO"]
// ์ฌ๋ฌ ์ค ๋ชจ๋์์ ๊ฐ ์ค์ ์์ ๋ถ๋ถ ๊ฒ์
const regex2 = /^start/gm;
"start of line 1\nstart of line 2".match(regex2); // ["start", "start"]
// ์ ๋์ฝ๋ ์ด๋ชจ์ง ๊ฒ์
const regex3 = /\p{Emoji}/gu;
"I love coffee โ".match(regex3); // ["โ"]
์์ฃผ ์ฌ์ฉ๋๋ ํจํด
์ด๋ฉ์ผ ์ฃผ์
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
emailRegex.test("user@example.com"); // true
URL
const urlRegex = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
urlRegex.test("https://www.example.com"); // true
๋ ์ง ํ์ (YYYY-MM-DD)
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
dateRegex.test("2024-03-15"); // true
๋ฉ์๋
test()
: ํจํด๊ณผ ์ผ์นํ๋์ง ํ์ธ (boolean ๋ฐํ)exec()
: ํจํด๊ณผ ์ผ์นํ๋ ๋ถ๋ถ์ ์ฐพ์ ๋ฐฐ์ด๋ก ๋ฐํmatch()
: ๋ฌธ์์ด ๋ฉ์๋, ์ผ์นํ๋ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํreplace()
: ํจํด๊ณผ ์ผ์นํ๋ ๋ถ๋ถ์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๊ต์ฒดsearch()
: ํจํด๊ณผ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค ๋ฐํ
const text = "Hello, my number is 123-456-7890.";
const phoneRegex = /\d{3}-\d{3}-\d{4}/;
phoneRegex.test(text); // true
phoneRegex.exec(text); // ["123-456-7890", index: 24, input: "Hello, my number is 123-456-7890.", groups: undefined]
text.match(phoneRegex); // ["123-456-7890"]
text.replace(phoneRegex, "XXX-XXX-XXXX"); // "Hello, my number is XXX-XXX-XXXX."
text.search(phoneRegex); // 24
๊ณ ๊ธ ๊ธฐ๋ฒ
๊ทธ๋ฃน๊ณผ ์บก์ฒ
๊ดํธ ()
๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน์ ๋ง๋ค๊ณ ์บก์ฒํ ์ ์์ต๋๋ค.
const regex = /(\d{3})-(\d{3})-(\d{4})/;
const match = regex.exec("My number is 123-456-7890");
console.log(match[1]); // "123"
console.log(match[2]); // "456"
console.log(match[3]); // "7890"
๋ฐฑ๋ ํผ๋ฐ์ค
์บก์ฒ๋ ๊ทธ๋ฃน์ ์ฐธ์กฐํ ๋ ์ฌ์ฉํฉ๋๋ค.
const regex = /(\w+)\s+\1/;
regex.test("hello hello"); // true
regex.test("hello world"); // false
ํ์
ํจํด์ ๋งค์นํ์ง๋ง ๊ฒฐ๊ณผ์ ํฌํจ์ํค์ง ์์ต๋๋ค.
- ๊ธ์ ์ ๋ฐฉํ์: (?=...)
- ๋ถ์ ์ ๋ฐฉํ์: (?!...)
- ๊ธ์ ํ๋ฐฉํ์: (?<=...)
- ๋ถ์ ํ๋ฐฉํ์: (?<!...)
const regex = /\d+(?=์)/;
console.log("5000์".match(regex)); // ["5000"]
const negativeRegex = /\d+(?!์)/;
console.log("5000๋ฌ๋ฌ".match(negativeRegex)); // ["5000"]
์์
๋น๋ฐ๋ฒํธ ๋ณต์ก์ฑ ๊ฒ์ฆ
function validatePassword(password) {
const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
return regex.test(password);
}
console.log(validatePassword("Abcd1234!")); // true
console.log(validatePassword("password123")); // false
HTML ํ๊ทธ ์ ๊ฑฐ
function stripHTMLTags(html) {
return html.replace(/<[^>]*>/g, '');
}
const html = "<p>Hello <strong>World</strong>!</p>";
console.log(stripHTMLTags(html)); // "Hello World!"
CSV ํ์ฑ
function parseCSV(csv) {
const rows = csv.split('\n');
return rows.map(row => {
return row.match(/(".*?"|[^",]+)(?=\s*,|\s*$)/g).map(cell => {
return cell.replace(/^"(.*)"$/, '$1');
});
});
}
const csv = `"Name","Age","City"
"John Doe",30,"New York"
"Jane Smith",25,"Los Angeles"`;
console.log(parseCSV(csv));
'๐ฅ Develop > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด ์ ๋ ฌํ๊ธฐ (0) | 2024.07.29 |
---|---|
[Javascript] Object.entries() ๋ฉ์๋ (0) | 2024.07.27 |
[Javascript] ์คํ๋ ๋(Spread) ์ฐ์ฐ์ (0) | 2024.07.26 |
[Javascript] ๋ฐ์ดํฐ ํ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ฐฉ์ (1) | 2024.07.24 |
[Javascript] ํด๋ก์ (Closure) (3) | 2024.07.20 |