This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

์ •๊ทœ ํ‘œํ˜„์‹

์ •๊ทœ ํ‘œํ˜„์‹, ๋˜๋Š” ์ •๊ทœ์‹์€ ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ฌธ์ž ์กฐํ•ฉ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. JavaScript์—์„œ๋Š” ์ •๊ทœ ํ‘œํ˜„์‹๋„ ๊ฐ์ฒด๋กœ์„œ, RegExp์˜ exec()์™€ test() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. String์˜ match(), matchAll(), replace(), replaceAll(), search(), split() ๋ฉ”์„œ๋“œ์™€๋„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” JavaScript์˜ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹ ๋งŒ๋“ค๊ธฐ

์ •๊ทœ ํ‘œํ˜„์‹์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ •๊ทœ ํ‘œํ˜„์‹ ๋ฆฌํ„ฐ๋Ÿด. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์Šฌ๋ž˜์‹œ๋กœ ํŒจํ„ด์„ ๊ฐ์‹ธ์„œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

    js
    const re = /ab+c/;
    

    ์ •๊ทœ ํ‘œํ˜„์‹ ๋ฆฌํ„ฐ๋Ÿด์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ, ๋ฐ”๋€” ์ผ์ด ์—†๋Š” ํŒจํ„ด์˜ ๊ฒฝ์šฐ ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • RegExp ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ.

    js
    const re = new RegExp("ab+c");
    

    ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •๊ทœ ํ‘œํ˜„์‹์ด ๋Ÿฐํƒ€์ž„์— ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ด๋‚˜, ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋“ฑ ์™ธ๋ถ€ ์ถœ์ฒ˜์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ํŒจํ„ด์˜ ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด ์ž‘์„ฑํ•˜๊ธฐ

์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด์€ /abc/์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ ๋ฌธ์ž๋กœ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜, /ab+c/์™€ /Chapter (\d+)\.\d*/์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ ๋ฌธ์ž์™€ ํŠน์ˆ˜ ๋ฌธ์ž์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ (\d+)์— ๋‚˜ํƒ€๋‚œ ๊ด„ํ˜ธ๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์—์„œ ๊ธฐ์–ต ์žฅ์น˜์ฒ˜๋Ÿผ ์“ฐ์—ฌ์„œ, ๊ด„ํ˜ธ์˜ ์•ˆ์ชฝ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•œ ๋ถ€๋ถ„์„ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์‚ฌ์šฉํ•˜๊ธฐ์—์„œ ๋” ์•Œ์•„๋ณด์„ธ์š”.

๋‹จ์ˆœ ํŒจํ„ด ์‚ฌ์šฉํ•˜๊ธฐ

๋‹จ์ˆœ ํŒจํ„ด์€ ๋ฌธ์ž์—ด์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, /abc/ ํŒจํ„ด์€ ๋ฌธ์ž์—ด์—์„œ ์ •ํ™•ํ•œ ์ˆœ์„œ๋กœ "abc"๋ผ๋Š” ๋ฌธ์ž์˜ ์กฐํ•ฉ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๋ถ„๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ํŒจํ„ด์€ "Hi, do you know your abc's?"์™€ "The latest airplane designs evolved from slabcraft." ๋‘ ๋ฌธ์ž์—ด์—์„œ ์ผ์น˜์— ์„ฑ๊ณตํ•˜๊ณ , ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์€ "abc"์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด "Grab crab"์—์„œ๋Š” ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋ฐ, ์ด ๋ฌธ์ž์—ด์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ "ab c"๋ฅผ ํฌํ•จํ•˜๊ธด ํ•˜์ง€๋งŒ, ์ •ํ™•ํ•˜๊ฒŒ "abc"๋ฅผ ํฌํ•จํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํŠน์ˆ˜ ๋ฌธ์ž ์‚ฌ์šฉํ•˜๊ธฐ

ํ•˜๋‚˜ ์ด์ƒ์˜ "b"๋ฅผ ์ฐพ๋Š”๋‹ค๊ฑฐ๋‚˜ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์ฐพ๋Š” ๋“ฑ ์ง์ ‘์ ์ธ ์ผ์น˜ ์ด์ƒ์˜ ํƒ์ƒ‰์ด ํ•„์š”ํ•  ๋• ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ปจ๋Œ€ "ํ•˜๋‚˜์˜ "a" ์ดํ›„์— 0๊ฐœ ์ด์ƒ์˜ "b", ๊ทธ ๋’ค์˜ "c""์™€ ์ผ์น˜ํ•ด์•ผ ํ•˜๋ฉด /ab*c/ ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "b" ๋’ค์˜ *๋Š” "์ด์ „ ํ•ญ๋ชฉ์˜ 0๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต"์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ๋ฌธ์ž์—ด "cbbabbbbcdebc"์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•˜๋ฉด, ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ "abbbbc"์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ๋ฌธ์„œ๋“ค์—์„  ๊ฐ๊ฐ์˜ ๋ฒ”์ฃผ์— ์†ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํŠน์ˆ˜ ๋ฌธ์ž์˜ ๋ชฉ๋ก๊ณผ ์„ค๋ช…, ์˜ˆ์ œ๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์„œ์…˜

์–ด์„œ์…˜์—๋Š” ์ค„์ด๋‚˜ ๋‹จ์–ด์˜ ์‹œ์ž‘๊ณผ ๋์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ๊ณ„์™€, ์ผ์น˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด(์ „๋ฐฉํƒ์ƒ‰, ํ›„๋ฐฉํƒ์ƒ‰, ์กฐ๊ฑด ํ‘œํ˜„์‹ ๋“ฑ)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ž ํด๋ž˜์Šค

๊ธ€์ž์™€ ์ˆซ์ž์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฃน๊ณผ ๋ฒ”์œ„

ํ‘œํ˜„ ๋ฌธ์ž์˜ ๊ทธ๋ฃน๊ณผ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ˆ˜๋Ÿ‰์ž

์ผ์น˜ํ•  ๋ฌธ์ž๋‚˜ ํ‘œํ˜„์ด ๋ฐ˜๋ณต๋˜์–ด์•ผ ํ•  ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์œ ๋‹ˆ์ฝ”๋“œ ์†์„ฑ ์ด์Šค์ผ€์ดํ”„

๋Œ€/์†Œ๋ฌธ์ž, ์ˆ˜ํ•™ ๊ธฐํ˜ธ, ๋ฌธ์žฅ ๋ถ€ํ˜ธ์ฒ˜๋Ÿผ, ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž ์†์„ฑ์— ๋”ฐ๋ผ ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ํ‘œ๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํŠน์ˆ˜๋ฌธ์ž์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹ ํŠน์ˆ˜๋ฌธ์ž
๋ฌธ์ž / ์กฐํ•ฉ ๋ฌธ์„œ
\, ., \cX, \d, \D, \f, \n, \r, \s, \S, \t, \v, \w, \W, \0, \xhh, \uhhhh, \uhhhhh, [\b]

๋ฌธ์ž ํด๋ž˜์Šค

^, $, x(?=y), x(?!y), (?<=y)x, (?<!y)x, \b, \B

์–ด์„œ์…˜

(x), (?:x), (?<Name>x), x|y, [xyz], [^xyz], \Number

๊ทธ๋ฃน๊ณผ ๋ฒ”์œ„

*, +, ?, x{n}, x{n,}, x{n,m}

์ˆ˜๋Ÿ‰์ž

\p{UnicodeProperty}, \P{UnicodeProperty} ์œ ๋‹ˆ์ฝ”๋“œ ์†์„ฑ ์ด์Šค์ผ€์ดํ”„

์ฐธ๊ณ  : ์œ„ ๋ฌธ์„œ์˜ ์ผ๋ถ€๋งŒ ๋ฐœ์ทŒํ•ด ์ •๋ฆฌํ•ด๋†“์€, ๋” ํฐ ์น˜ํŠธ ์‹œํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์Šค์ผ€์ดํ•‘

ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ํƒ์ƒ‰("*"์„ ์ง์ ‘ ์ฐพ๋Š” ๋“ฑ)ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํŠน์ˆ˜ ๋ฌธ์ž ์•ž์— ์—ญ์Šฌ๋ž˜์‹œ(\)๋ฅผ ๋ฐฐ์น˜ํ•ด์„œ ์ด์Šค์ผ€์ดํ”„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "a" ๋’ค์˜ ๋ณ„ํ‘œ("*") ๋’ค์˜ "b"์™€ ์ผ์น˜ํ•ด์•ผ ํ•˜๋ฉด /a\*b/๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ญ์Šฌ๋ž˜์‹œ๊ฐ€ "*"๋ฅผ "์ด์Šค์ผ€์ดํ”„"ํ•ด์„œ, ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์Šฌ๋ž˜์‹œ(/)์™€ ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ด์Šค์ผ€์ดํ”„๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋น—๊ธˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒจํ„ด์ด ๋๋‚˜๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ž์—ด "/example/"๊ณผ ๊ทธ ๋’ค ํ•˜๋‚˜ ์ด์ƒ์˜ ์•ŒํŒŒ๋ฒณ์„ ์ฐพ์œผ๋ ค๋ฉด /\/example\/[a-z]/๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์Šฌ๋ž˜์‹œ ์•ž์— ๋†“์ธ ์—ญ์Šฌ๋ž˜์‹œ๊ฐ€ ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌํ„ฐ๋Ÿด ์—ญ์Šฌ๋ž˜์‹œ์— ์ผ์น˜ํ•˜๋ ค๋ฉด ์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ฉ๋‹ˆ๋‹ค. "A:\", "B:\", "C:\", ..., "Z:\"์™€ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด์€ /[A-Z]:\\/์ž…๋‹ˆ๋‹ค. ์•ž์˜ ์—ญ์Šฌ๋ž˜์‹œ๊ฐ€ ๋’ค์˜ ์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์„œ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฆฌํ„ฐ๋Ÿด ์—ญ์Šฌ๋ž˜์‹œ์™€ ์ผ์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

RegExp ์ƒ์„ฑ์ž์™€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์—ญ์Šฌ๋ž˜์‹œ๊ฐ€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์˜ ์ด์Šค์ผ€์ดํ”„๋กœ๋„ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ •๊ทœ ํ‘œํ˜„์‹์˜ ์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์ˆ˜์ค€์˜ ์ด์Šค์ผ€์ดํ”„๋„ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์•ž์„œ ์‚ดํŽด๋ณธ /a\*b/ ํŒจํ„ด์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด new RegExp("a\\*b")๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์Šค์ผ€์ดํ”„ ๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด์„ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋• String.replace๋ฅผ ํ™œ์šฉํ•ด ์ด์Šค์ผ€์ดํ”„๋ฅผ ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

js
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $&์€ ์ผ์น˜ํ•œ ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ์˜๋ฏธ
}

์ •๊ทœ ํ‘œํ˜„์‹ ๋’ค์˜ "g"๋Š” ์ „์ฒด ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•ด์„œ ๋ชจ๋“  ์ผ์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ง€์ •ํ•˜๋Š” ์ „์—ญ ํƒ์ƒ‰ ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•œ ๊ณ ๊ธ‰ ํƒ์ƒ‰์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"์™œ escapeRegExp()๊ฐ€ JavaScript์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?" ๊ด€๋ จ ์ œ์•ˆ์€ ์žˆ์—ˆ์œผ๋‚˜ TC39๊ฐ€ ๊ฑฐ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ด„ํ˜ธ ์‚ฌ์šฉํ•˜๊ธฐ

์ •๊ทœ ํ‘œํ˜„์‹์˜ ์•„๋ฌด ๋ถ€๋ถ„์ด๋‚˜ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ฒŒ ๋˜๋ฉด, ๊ทธ ๋ถ€๋ถ„๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ธฐ์–ตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์–ตํ•œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ ๋ถˆ๋Ÿฌ์™€์„œ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฃน๊ณผ ๋ฒ”์œ„ ๋ฌธ์„œ์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

JavaScript์—์„œ ์ •๊ทœ ํ‘œํ˜„์‹ ์‚ฌ์šฉํ•˜๊ธฐ

์ •๊ทœ ํ‘œํ˜„์‹์€ RegExp์˜ ๋ฉ”์„œ๋“œ test()์™€ exec(), String์˜ ๋ฉ”์„œ๋“œ match(), replace(), search(), split()์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ ์„ค๋ช…
exec() ๋ฌธ์ž์—ด์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ผ์น˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฐ์—ด, ๋˜๋Š” ์ผ์น˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
test() ๋ฌธ์ž์—ด์— ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. true ๋˜๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
match() ์บก์ฒ˜ ๊ทธ๋ฃน์„ ํฌํ•จํ•ด์„œ ๋ชจ๋“  ์ผ์น˜๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ์น˜๊ฐ€ ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
matchAll() ์บก์ฒ˜ ๊ทธ๋ฃน์„ ํฌํ•จํ•ด์„œ ๋ชจ๋“  ์ผ์น˜๋ฅผ ๋‹ด์€ ๋ฐ˜๋ณต๊ธฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
search() ๋ฌธ์ž์—ด์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์˜ ์ธ๋ฑ์Šค, ๋˜๋Š” ์ผ์น˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
replace() ๋ฌธ์ž์—ด์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ํƒ์ƒ‰ํ•˜๊ณ , ๊ทธ ๋ถ€๋ถ„์„ ๋Œ€์ฒด ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
replaceAll() ๋ฌธ์ž์—ด์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๊ณ , ๋ชจ๋‘ ๋Œ€์ฒด ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
split() ์ •๊ทœ ํ‘œํ˜„์‹ ๋˜๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ๋‚ด๋ถ€์— ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•˜๋Š”์ง€๋งŒ ์•Œ์•„๋‚ด๋ ค๋ฉด test()๋‚˜ search() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋” ๋А๋ฆฌ๋”๋ผ๋„ ์ผ์น˜์— ๊ด€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฉด exec()๊ณผ match() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•˜๋ฉด, exec()๊ณผ match()๋Š” ์ผ์น˜์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ผ์น˜์— ์‚ฌ์šฉํ•œ ์ •๊ทœ ํ‘œํ˜„์‹ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. (null์€ ์กฐ๊ฑด ํ‰๊ฐ€ ์‹œ false์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค)

์•„๋ž˜์˜ ์˜ˆ์ œ์—์„œ๋Š”, ๋ฌธ์ž์—ด์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด exec() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

js
const myRe = /d(b+)d/g;
const myArray = myRe.exec("cdbbdbsbz");

๋งŒ์•ฝ ์ •๊ทœ ํ‘œํ˜„์‹ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์งง๊ฒŒ ์“ธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

js
const myArray = /d(b+)d/g.exec("cdbbdbsbz");
// 'cdbbdbsbz'.match(/d(b+)d/g); ์™€ ๋น„์Šทํ•˜์ง€๋งŒ,
// 'cdbbdbsbz'.match(/d(b+)d/g)์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ [ 'dbbd' ]์ธ ๋ฐ˜๋ฉด
// /d(b+)d/g.exec('cdbbdbsbz')์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]

(์•„๋ž˜์˜ exec()๊ณผ ์ „์—ญ ํƒ์ƒ‰ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉํ•˜๊ธฐ์—์„œ ๋™์ž‘ ๋ฐฉ์‹์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์„ธ์š”)

์ •๊ทœ ํ‘œํ˜„์‹์„ ๋ฌธ์ž์—ด์—์„œ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

js
const myRe = new RegExp("d(b+)d", "g");
const myArray = myRe.exec("cdbbdbsbz");

์•„๋ž˜์˜ ํ‘œ๋Š” ์œ„ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ผ์น˜๋ฅผ ์„ฑ๊ณตํ•œ ํ›„, ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฐ์—ด๊ณผ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹ ๊ฐ์ฒด์˜ ์†์„ฑ์ž…๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹ ์‹คํ–‰ ๊ฒฐ๊ณผ
๊ฐ์ฒด ์†์„ฑ ๋˜๋Š” ์ธ๋ฑ์Šค ์„ค๋ช… ์œ„ ์˜ˆ์ œ์—์„œ์˜ ๊ฐ’
myArray ์ผ์น˜ํ•œ ๋ฌธ์ž์—ด ๋ฐ ๊ธฐ์–ตํ•œ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด. ['dbbd', 'bb', index: 1, input: 'cdbbdbsbz']
index ์ผ์น˜ํ•œ ๋ถ€๋ถ„์ด ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ์œ„์น˜ํ•œ ์ธ๋ฑ์Šค. (0๋ถ€ํ„ฐ ์‹œ์ž‘) 1
input ์ฃผ์–ด์ง„ ์›๋ณธ ๋ฌธ์ž์—ด. 'cdbbdbsbz'
[0] ๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์น˜ํ•œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด. 'dbbd'
myRe lastIndex ๋‹ค์Œ ์ผ์น˜๋ฅผ ์‹œ์ž‘ํ•  ์ธ๋ฑ์Šค. (g ์˜ต์…˜์„ ์ง€์ •ํ•œ ์ •๊ทœ ํ‘œํ˜„์‹์˜ ๊ฒฝ์šฐ์—๋งŒ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•œ ๊ณ ๊ธ‰ ํƒ์ƒ‰์„ ์ฐธ๊ณ ํ•˜์„ธ์š”) 5
source ํŒจํ„ด์˜ ํ…์ŠคํŠธ. ์ •๊ทœ ํ‘œํ˜„์‹์ด ์ƒ์„ฑ๋  ๋•Œ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ์ ์—๋Š” ๊ฐฑ์‹ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 'd(b+)d'

์œ„ ์˜ˆ์ œ์˜ ๋‘ ๋ฒˆ์งธ ํ˜•ํƒœ์ฒ˜๋Ÿผ, ์ •๊ทœ ํ‘œํ˜„์‹ ๊ฐ์ฒด๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋Ÿฌ๋ฉด ๋งค ์‚ฌ์šฉ๋งˆ๋‹ค ์ •๊ทœ ํ‘œํ˜„์‹ ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์—…๋ฐ์ดํŠธ๋˜๋Š” ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

js
const myRe = /d(b+)d/g;
const myArray = myRe.exec("cdbbdbsbz");
console.log(`lastIndex์˜ ๊ฐ’์€ ${myRe.lastIndex}`);

// "lastIndex์˜ ๊ฐ’์€ 5"

๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ ์ฝ”๋“œ ๋Œ€์‹  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด...

js
const myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log(`lastIndex์˜ ๊ฐ’์€ ${/d(b+)d/g.lastIndex}`);

// "lastIndex์˜ ๊ฐ’์€ 0"

๋‘ ๊ฐœ์˜ /d(b+)d/g ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ •๊ทœ ํ‘œํ˜„์‹ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ณ„๊ฐœ์˜ lastIndex ์†์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ •๊ทœ ํ‘œํ˜„์‹ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋ฉด, ์šฐ์„  ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์„ธ์š”.

ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•œ ๊ณ ๊ธ‰ ํƒ์ƒ‰

์ •๊ทœ ํ‘œํ˜„์‹์€ ์ „์—ญ ํƒ์ƒ‰์ด๋‚˜ ๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ์™€ ๊ฐ™์€ ํŠน์„ฑ์„ ์ง€์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๋Š” ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ˆœ์„œ์— ์ƒ๊ด€ ์—†์ด ํ•œ๊บผ๋ฒˆ์— ์—ฌ๋Ÿฟ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ž˜๊ทธ ์„ค๋ช… ๋Œ€์‘ํ•˜๋Š” ์†์„ฑ
d ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ผ์น˜์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค ์ƒ์„ฑ. RegExp.prototype.hasIndices
g ์ „์—ญ ํƒ์ƒ‰. RegExp.prototype.global
i ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Œ. RegExp.prototype.ignoreCase
m ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ํƒ์ƒ‰. RegExp.prototype.multiline
s ๊ฐœํ–‰ ๋ฌธ์ž๊ฐ€ .๊ณผ ์ผ์น˜ํ•จ. RegExp.prototype.dotAll
u "unicode", ํŒจํ„ด์„ ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ์˜ ์‹œํ€€์Šค๋กœ ๊ฐ„์ฃผํ•จ. RegExp.prototype.unicode
y "์ ‘์ฐฉ" ํƒ์ƒ‰, ๋Œ€์ƒ ๋ฌธ์ž์—ด์˜ ํ˜„์žฌ ์œ„์น˜์—์„œ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•จ. sticky๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. RegExp.prototype.sticky

ํ”Œ๋ž˜๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์œผ๋กœ ์ •๊ทœ ํ‘œํ˜„์‹์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

js
const re = /pattern/flags;

์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

js
const re = new RegExp("pattern", "flags");

ํ”Œ๋ž˜๊ทธ๋Š” ์ •๊ทœ์‹๊ณผ ์™„์ „ํžˆ ํ•ฉ์ณ์ง€๋ฏ€๋กœ ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, re = /\w+\s/g๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ๊ธ€์ž์™€ ๊ทธ ๋’ค์˜ ๊ณต๋ฐฑ ํ•˜๋‚˜๋ฅผ, ๋ฌธ์ž์—ด ์ „์ฒด์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

js
const re = /\w+\s/g;
const str = "fee fi fo fum";
const myArray = str.match(re);
console.log(myArray);

// ["fee ", "fi ", "fo "]

์•„๋ž˜ ์ฝ”๋“œ๋Š”...

js
const re = /\w+\s/g;

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

js
const re = new RegExp("\\w+\\s", "g");

๋‘ ๊ตฌ๋ฌธ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์Šต๋‹ˆ๋‹ค.

m ํ”Œ๋ž˜๊ทธ๋Š” ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์นœ ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ์—ฌ๋Ÿฌ ์ค„๋กœ ์ทจ๊ธ‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋งํ•ด, m ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•  ๊ฒฝ์šฐ, ^์™€ $๋Š” ๊ฐ๊ฐ ์ „์ฒด ์ž…๋ ฅ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘๊ณผ ๋์ด ์•„๋‹ˆ๋ผ, ๊ฐ ์ค„์˜ ์‹œ์ž‘๊ณผ ๋์— ๋Œ€์‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

exec()๊ณผ ์ „์—ญ ํƒ์ƒ‰ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉํ•˜๊ธฐ

RegExp.prototype.exec() ๋ฉ”์„œ๋“œ์™€ g ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ผ์น˜ํ•œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋“ค๊ณผ ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

js
const str = "fee fi fo fum";
const re = /\w+\s/g;

console.log(re.exec(str)); // ["fee ", index: 0, input: "fee fi fo fum"]
console.log(re.exec(str)); // ["fi ", index: 4, input: "fee fi fo fum"]
console.log(re.exec(str)); // ["fo ", index: 7, input: "fee fi fo fum"]
console.log(re.exec(str)); // null

๋ฐ˜๋ฉด, String.prototype.match() ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ์ผ์น˜๋ฅผ ํ•œ ๋ฒˆ์— ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

js
console.log(str.match(re)); // ["fee ", "fi ", "fo "]

์˜ˆ์ œ

์ฐธ๊ณ  : ๋‹ค์Œ ๋ฌธ์„œ์—์„œ๋„ ์ •๊ทœ ํ‘œํ˜„์‹์˜ ์‚ฌ์šฉ ์˜ˆ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ

์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "ํ™•์ธ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ž…๋ ฅํ•œ ๊ฐ’์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ์œ ํšจํ•˜๋ฉด, ์ฆ‰ ์ •๊ทœ ํ‘œํ˜„์‹๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์˜ ์‹œํ€€์Šค๋ฅผ ๋ฐ›์•˜์œผ๋ฉด, ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์‚ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด, ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฐ’์ž„์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ์˜ ์‹œ์ž‘์ (^)
  2. ๋น„์บก์ฒ˜ ๊ทธ๋ฃน((?:))์œผ๋กœ, 1์˜ ๋’ค๋ฅผ ์ž‡๋Š” ์„ธ ๊ฐœ์˜ ์ˆซ์ž(\d{3}), ๋˜๋Š”(|), ์—ฌ๋Š” ๊ด„ํ˜ธ(\()์˜ ๋’ค๋ฅผ ์ž‡๋Š” ์„ธ ๊ฐœ์˜ ์ˆซ์ž(\d{3})์˜ ๋’ค๋ฅผ ์ž‡๋Š” ๋‹ซ๋Š” ๊ด„ํ˜ธ(\))
  3. ์บก์ฒ˜ ๊ทธ๋ฃน(())์œผ๋กœ, 2์˜ ๋’ค๋ฅผ ์ž‡๋Š” ํ•˜๋‚˜์˜ ๋Œ€์‹œ, ์Šฌ๋ž˜์‹œ, ๋˜๋Š” ๋งˆ์นจํ‘œ
  4. 3์˜ ๋’ค๋ฅผ ์ž‡๋Š” ๋„ค ๊ฐœ์˜ ์ˆซ์ž(\d{4})
  5. 4์˜ ๋’ค๋ฅผ ์ž‡๋Š”, ์ฒซ ๋ฒˆ์งธ ์บก์ฒ˜ ๊ทธ๋ฃน์—์„œ ๊ธฐ์–ตํ•œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด(\1)
  6. 5์˜ ๋’ค๋ฅผ ์ž‡๋Š” ๋„ค ๊ฐœ์˜ ์ˆซ์ž(\d{4})
  7. ๋ฐ์ดํ„ฐ์˜ ๋์ ($)

HTML

html
<p>
  ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ํ›„ "ํ™•์ธ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์„ธ์š”.
  <br />
  ###-####-####์˜ ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•˜์„ธ์š”.
</p>
<form id="form">
  <input id="phone" />
  <button type="submit">ํ™•์ธ</button>
</form>
<p id="output"></p>

JavaScript

js
const form = document.querySelector("#form");
const input = document.querySelector("#phone");
const output = document.querySelector("#output");

const re = /^(?:\d{3}|\(\d{3}\))([-\/\.])\d{4}\1\d{4}$/;

function testInfo(phoneInput) {
  const ok = re.exec(phoneInput.value);

  if (!ok) {
    output.textContent = `ํ˜•์‹์— ๋งž์ง€ ์•Š๋Š” ์ „ํ™”๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. (${phoneInput.value})`;
  } else {
    output.textContent = `๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™”๋ฒˆํ˜ธ๋Š” ${ok[0]} ์ž…๋‹ˆ๋‹ค.`;
  }
}

form.addEventListener("submit", (event) => {
  event.preventDefault();
  testInfo(input);
});

๊ฒฐ๊ณผ

๋„๊ตฌ

RegExr

์ •๊ทœ ํ‘œํ˜„์‹์„ ๋ฐฐ์šฐ๊ณ , ๋งŒ๋“ค๊ณ , ์‹œํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ์˜จ๋ผ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Regex tester

์ •๊ทœ ํ‘œํ˜„์‹ ์ƒ์„ฑ๊ธฐ/๋””๋ฒ„๊ฑฐ์ž…๋‹ˆ๋‹ค.

Regex visualizer

์‹œ๊ฐ์  ์ •๊ทœ ํ‘œํ˜„์‹ ํ…Œ์Šคํ„ฐ์ž…๋‹ˆ๋‹ค.