์ ๊ทํํ์ ๊ณต๋ถ?
string ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ํน์ ๋ฌธ์๋ฅผ ์ฐพ๊ฑฐ๋ ๋์ฒดํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ด ๋ slice, splice๋ฅผ ์ฐ๊ธฐ์๋ ์ ๋งคํ๊ฑฐ๋ ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ด ์์ ๋๋ ์ ๊ทํํ์์ ์จ์ผํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๊ทํํ์์ด ์๋ ์ง๊ด์ ์ด์ง ์๊ฒ ์๊ฒจ์ ์ดํด๊ฐ ์ด๋ ค์ด๋ฐ์.
ํ์ํ ๋ ๋ง๋ค ์ฐพ์ ์ฐ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์ง๋ง, ์ฐพ์๋ณด๋ ค๋ฉด ์ดํดํ๊ธฐ ์ํด ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๊ทธ๋์ ํ ๋ฒ ์ ๋ฆฌํด๋๋ฉด ๋์ค์ ์ดํดํ๊ธฐ๋ ํธํ๊ณ ์ฝ๊ฒ ์ฐพ์ ์ธ ์ ์์ด์ ์ ๋ฆฌ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ชจ๋ ์ ๊ทํํ์์ ๋ค๋ฃจ์ง๋ ์๊ณ ๋ง์ด ์ฌ์ฉ๋๋ ์ ๊ทํํ์ ์์ฃผ๋ก ๊ธฐ๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ์ ์ ์ ๊ทํํ์์ ์ญํ ์ ๋ํด ์ค๋ช ํ์๋ฉด,
1. ๋ฌธ์๊ฒ์(search)
2. ๋ฌธ์ ๋์ฒด(replace)
3. ๋ฌธ์ ์ถ์ถ(extract)
์ด ์ธ๊ฐ์ง ์ญํ ์ด ์์ต๋๋ค.
๋ ๊ฐ์ง ์ ๊ท์ ์์ฑ ๋ฐฉ์
JS์์๋ ์ ๊ท์์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ฃผ๋ก ๋ฆฌํฐ๋ด ๋ฐฉ์์ ์ฐ๊ธฐ๋ ํ์ง๋ง ์์ฑ์ ํจ์ ๋ฐฉ์๋ ์์๋ ํ์๊ฐ ์์ต๋๋ค!
new RegExp('ํํ', '์ต์
')
new RegEcp('[a-z]', 'gi') <- ์์
/ํํ/์ต์
/[a-z]/gi <- ์์
์ ๊ทํํ์์ ํ๋๊ทธ์ ๋ฐ๋ฅธ ์ต์ ์ ์์๋ด ์๋ค.
g : ๋ชจ๋ ๋ฌธ์ ์ผ์น(global)
i : ์์ด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถ ์๊ณ ์ผ์น(ignore case)
m : ์ฌ๋ฌ ์ค ์ผ์น(multi line)
์์ ๊ฐ์ ์ต์ ๋ค๋ก ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์์ต๋๋ค!
์ต์ ๋ค์ ํ์ฉํด์ ์ด๋ ํ ํจํด๋ค๋ก ์ ๊ทํํ์์ด ํ์ฉ๋๋์ง ์์๋ด ์๋ค!
^ab - ์ค(Line) ์์์ ์๋ ab์ ์ผ์น
console.log(
str.match(/^t/gm)
)
=> ํ ๋ผ์ธ์์ t ๋ก ์์ํ๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค.
ab$ - ์ค(Line) ๋์ ์๋ ab์ ์ผ์น
console.log(
str.match(/d$/gm)
)
=> ํ ๋ผ์ธ์์ d๋ก ๋๋๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค.
. - ์์์ ํ ๋ฌธ์์ ์ผ์น
console.log(
str.match(/a.c/gm)
)
=> ํ ๋ผ์ธ์์ a ์ c ๋ฅผ ์ ๋์ผ๋ก ํ๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค.
a | b - a ๋๋ b ์ ์ผ์น
console.log(
str.match(/fox|dog/gm)
)
=> fox์ด๊ฑฐ๋ dog์ธ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋จผ์ ์ฐพ์ ๊ฒ์ ์ถ๋ ฅ
ab? - b๊ฐ ์๊ฑฐ๋ b์ ์ผ์น
console.log(
str.match(/https?/g)
)
=> s ๊ฐ ์์ ์๋ ์๊ณ ์์ ์๋ ์๋ http ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค.
{3} - 3๊ฐ ์ฐ์ ์ผ์น
{3, } - 3๊ฐ ์ด์ ์ฐ์ ์ผ์น
{3, 5} - 3๊ฐ ์ด์ 5๊ฐ ์ดํ(3~5) ์ฐ์ ์ผ์น
console.log(
str.match(/d{2}/g)
)
=> d ๊ฐ ๋ ๊ฐ ์ฐ์๋ ๋ฌธ์ ์ถ๋ ฅํ๋ค.
console.log(
str.match(/d{2, }/g)
)
=> d ๊ฐ ๋ ๊ฐ ์ด์ ์ฐ์๋ ๋ฌธ์ ์ถ๋ ฅํ๋ค.
console.log(
str.match(0-9{1, 3})
)
=> 0 ~ 9 ์ซ์ ์ฌ์ด์ 1๊ฐ์์ 3๊ฐ ์ด์ ์ฐ์๋ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ค.
[a-z] | a๋ถํฐ z ์ฌ์ด์ ๋ฌธ์ ๊ตฌ๊ฐ์ ์ผ์น(์์ด ์๋ฌธ์)
[A-Z] | A๋ถํฐ Z ์ฌ์ด์ ๋ฌธ์ ๊ตฌ๊ฐ์ ์ผ์น(์์ด ๋๋ฌธ์)
[0-9] | 0๋ถํฐ 9 ์ฌ์ด์ ๋ฌธ์ ๊ตฌ๊ฐ์ ์ผ์น(์ซ์)
[๊ฐ-ํฃ] | ๊ฐ๋ถํฐ ํฃ ์ฌ์ด์ ๋ฌธ์ ๊ตฌ๊ฐ์ ์ผ์น(ํ๊ธ)
console.log(str.match(/\bf\w{1, }\b/g))
=> 63๊ฐ ๋ฌธ์์ ํฌํจ๋์ง ์์ผ๋ฉด ๊ฒฝ๊ณ๋ก ๋ฐ๊ฟ(์๋ฌธ์ f๋ก ์์ํ๋ ๋ชจ๋ ์๋จ์ด ์ฐพ๊ธฐ)
const h = ' the hello wrold !'
console.log(
h.replace(/\s/g, '')
)
=> ๊ณต๋ฐฑ์ ์ง์์ฃผ๋ ์ฝ๋
(?=) | ์์ชฝ ์ผ์น(Lookahead)
(?<=) | ๋ค์ชฝ ์ผ์น(Lookbehind)
str = "asdf1234@naver.com"
console.log(
str.match(/.{1, }(?=@)/g)
)
=> @ ์์ชฝ์ ์์ด๋ ๋ถ๋ถ๋ง ์ถ๋ ฅํ๋ค.
str = "asdf1234@naver.com"
console.log(
str.match(/(?<=@).{1, }/g)
)
=> @ ๋ค์ ๋ถ๋ถ์ ์ฐพ์ ์ค๋ ฅํ๋ค.
RegExr: Learn, Build, & Test RegEx
์ด๊ณณ์์ ์ ๊ทํํ์์ ํ ์คํธ ํ ์๋ ์๋ค.