๐ ์๊ณ ๋ฆฌ์ฆ์ ์๋ ์ ๊ทํํ์์ ์ ๋ฆฌ ๋ชปํด์ ์ ๋ฆฌํด๋ณด๋๋ก ํ์.
๋๋ถ๋ถ์ ํ์๊ฐ์ ์ด ํ์ํ ์๋น์ค๋ ๋น๋ฐ๋ฒํธ ์ค์ ์ ํน์ ์กฐ๊ฑด์ ๋ง์ถ์ด ์ ๋ ฅํ๋ผ๊ณ ์๊ตฌํ๋ค. ๋น๋ฐ๋ฒํธ ์ค์ ์ ํน์ ์กฐ๊ฑด์ ์๊ตฌํ๋ ๊ฒ์ ๋ณด์ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ์๋น์ค์ ๊ด๋ฆฌ์๋ ์ด๋ป๊ฒ ๋น๋ฐ๋ฒํธ์ ์ ๋ ฅ ์กฐ๊ฑด์ ์ค์ ํ๊ณ ๊ด๋ฆฌํ ๋ ๊ฐ๋จํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทํํ์์ด ์๋ค.
์ ๊ทํํ์์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ์ํ๋ฉด ๋ฌธ์์ด์์ ํน์ ํ ๋ฌธ์๋ฅผ ์ฐพ์๋ด๋ ๋๊ตฌ์ด๋ค. ์ ๊ทํํ์์ ์ด์ฉํ๋ฉด ์์ญ ์ค์ด ํ์ํ ์ฝ๋ฉ ์์ ์ ๊ฐ๋จํ๊ฒ ํ๋ ์ค๋ก ๋๋ผ ์ ์๋ค. ์ ๊ทํํ์์ ํน์ ํ ๊ท์น์ ๊ฐ๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ํํ์์ด๋ฉฐ, ์ ๊ทํํ์์์ ํน์ ๋ฌธ์๋ ๊ฐ๊ฐ์ ๊ณ ์ ํ ๊ท์น์ ๊ฐ๊ณ ์๋ค. ์ด๋ฌํ ๊ท์น๋ค์ ์กฐํฉํ์ฌ ์ํ๋ ํจํด์ ๋ง๋ค๊ณ , ํน์ ๋ฌธ์์ด์์ ํด๋น ํจํด๊ณผ ๋์ํ๋ ๋ฌธ์๋ฅผ ์ฐพ์ ์ ์๋ค.
์๋์ ์ฝ๋๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฉ์ผ์ด๋ ํด๋์ ํ ๋ฒํธ๊ฐ ์ ใ ํ์ง ํ์ธํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ์ ๊ทํํ์์ด๋ค. ์ ๊ทํํ์์ ์ฌ์ฉํ๋ค๋ฉด, ํ ์ค์ ์ฝ๋๋ง์ผ๋ก ์ด๋ฉ์ผ์ด๋ ํด๋์ ํ ๋ฒํธ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์์ง๋ง, ๋ง์ฝ ๊ทธ๋ ์ง ์์๋ค๋ฉด ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด์๋ ๊ต์ฅํ ๊ธด ์ฝ๋๊ฐ ํ์ํ์ ๊ฒ์ด๋ค.
์ด๋ฉ์ผ ์ ํจ์ฑ ๊ฒ์ฌ
let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
ํด๋์ ํ ๋ฒํธ ์ ํจ์ฑ ๊ฒ์ฌ
let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;
์ ๊ทํํ์ ์ฌ์ฉํ๊ธฐ
์ ๊ทํํ์์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ฆฌํฐ๋ด ํจํด
์ ๊ทํํ์ ๊ท์น์ ์ฌ๋์(/)๋ก ๊ฐ์ธ ์ฌ์ฉํ๋ค. ์ฌ๋์ ์์ ๋ค์ด์จ ๋ฌธ์์ด์ด ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ด๋ฉฐ, ์ปดํจํฐ์๊ฒ '์ฌ๋์ ์ฌ์ด์ ์๋ ๋ฌธ์์ด์ ์ฐพ๊ณ ์ถ๋ค'๋ผ๊ณ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ๊ฒ์ด๋ค.
let pattern = /c/;
์์ฑ์ ํจ์ ํธ์ถ ํจํด
let pattern = new RegExp('c');
์ ๊ทํํ์ ๋ด์ฅ ๋ฉ์๋
JavaScript์์ ์ ๊ทํํ์์ ๊ฐ์ฒด๋ก์ ๋ด์ฅ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, String ๊ฐ์ฒด์์๋ ์ ๊ทํํ์์ ์ฌ์ฉํ ์ ์๋ ๋ด์ฅ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ด์ฅ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ค ๋ฌธ์์ด ์์ ์ํ๋ ์ ๋ณด๋ฅผ ์ฐพ๊ฑฐ๋ ํน์ ํจํด์ ๋์ํ๋ ๋ฌธ์์ด์ ๊ฒ์, ์ถ์ถ, ๋ค๋ฅธ ๋ฌธ์์ด๋ก ์นํํ ์ ์๋ค.
RegExp ๊ฐ์ฒด์ ๋ฉ์๋
exec()
exec๋ execution์ ์ค์๋ง๋ก, ์ํ๋ ์ ๋ณด๋ฅผ ๋ฝ์๋ด๊ณ ํ ๋ ์ฌ์ฉํ๋ค. ๊ฒ์์ ๋์์ด ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ด๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ฉฐ, ์ฐพ๋ ๋ฌธ์์ด์ด ์๋ค๋ฉด null์ ๋ฐํํ๋ค.
let pattern = /c/;
pattern.exec('codestates);
// -> ['c']
test()
์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ด ๋์ ์์ ์๋์ง์ ์ฌ๋ถ๋ฅผ boolean์ผ๋ก ๋ฆฌํดํ๋ค.
let pattern = /c/;
pattern.test('codestates');
// -> true
String ๊ฐ์ฒด์ ๋ฉ์๋
match()
RegExp.exec()์ ๋น์ทํ ๊ธฐ๋ฅ์ ํ๋ฉฐ, ์ ๊ทํํ์์ ์ธ์๋ก ๋ฐ์ ์ฃผ์ด์ง ๋ฌธ์์ด๊ณผ ์ผ์น๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. ์ผ์น๋๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด null์ ๋ฆฌํดํ๋ค.
let pattern = /c/;
let str = 'codestates';
str.match(pattern);
// -> ['c']
replace()
'๊ฒ์ ํ ๋ฐ๊พธ๊ธฐ'๋ฅผ ์ํํ๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ก๋ ์ ๊ทํํ์์ ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก๋ ์นํํ๋ ค๋ ๋ฌธ์์ด์ ๋ฐ๋๋ค. ๋ฌธ์์ด์์ ์ฐพ๊ณ ์ ํ๋ ๋์์ ๊ฒ์ํด์ ์ด๋ฅผ ์นํํ๋ ค๋ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ ํ ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ฆฌํดํ๋ค.
let pattern = /c/;
let str = 'codestates';
str.replace(pattern, 'C');
// -> 'Codestates'
split()
์ฃผ์ด์ง ์ธ์๋ฅผ ๊ตฌ๋ถ์๋ก ์ผ์, ๋ฌธ์์ด์ ๋ถ๋ถ ๋ฌธ์์ด๋ก ๋๋์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
'123,456,789'.split(',') // ['123', '456', '789']
'12304560789'.split('0') // ['123', '456', '789']
search()
์ ๊ทํํ์์ ์ธ์๋ก ๋ฐ์ ๊ฐ์ฅ ์ฒ์ ๋งค์นญ๋๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์์น๋ฅผ ๋ฐํํ๋ค. ๋งค์นญ๋๋ ๋ฌธ์์ด์ด ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
"JavaScript".search(/script/); // -1 ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค
"JavaScript".search(/Script/); // 4
"codestates".search(/ode/); // 1
flag
์ ๊ทํํ์์ ํ๋๊ทธ๋ฅผ ์ค์ ํด ์ค ์ ์๊ณ , ํ๋๊ทธ๋ ์ถ๊ฐ์ ์ธ ๊ฒ์ ์ต์ ์ ์ญํ ์ ํด ์ค๋ค. ์ด ํ๋๊ทธ๋ค์ ๊ฐ๊ฐ ํน์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชจ๋ ๊ฐ๋ฅํ๊ณ , ์์์ ๊ตฌ๋ถ์ด ์๋ค.
i
i๋ฅผ ๋ถ์ด๋ฉด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
let withi = /c/i;
let withouti = /c/;
"Codestates".match(withi); // ['C']
"Codestates".match(withouti); // null
g
global์ ์ฝ์๋ก, g๋ฅผ ๋ถ์ด๋ฉด ๊ฒ์๋ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค.
let withg = /c/g;
let withoutg = /c/;
"coolcodestates".match(withg); // ['c', 'c']
"coolcodestates".match(withoutg); // ['c'] g ๊ฐ ์์ผ๋ฉด ์ฒซ ๋ฒ์งธ ๊ฒ์ ๊ฒฐ๊ณผ๋ง ๋ฐํํ๋ค.
m
m์ ๋ถ์ด๋ฉด ๋ค์คํ์ ๊ฒ์ํ๋ค.
let str = `1st : cool
2nd : code
3rd : states`;
str.match(/c/gm)
// 3๊ฐ์ ํ์ ๊ฒ์ํ์ฌ ๋ชจ๋ c ๋ฅผ ๋ฐํํ๋ค.
// ['c', 'c']
str.match(/c/m)
// m์ ๋ค์คํ์ ๊ฒ์ํ๊ฒ ํด ์ฃผ์ง๋ง, g ๋ฅผ ๋นผ๊ณ ๊ฒ์ํ๋ฉด ๊ฒ์ ๋์์ ์ฐพ๋ ์๊ฐ ๊ฒ์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์
// ์ฒซ ํ์ ['c'] ๋ง ๋ฆฌํดํ๋ค.
์ ๊ท์ํจํด(ํํ์)
์ ๊ทํํ์์ ๋ค์ํ ํน์๊ธฐํธ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋์ ๋ ๋ง์ ์ต์ ์ ์ค์ ํ ์ ์๋ค.
์ ๊ท์ ํจํด | ์ค๋ช |
^ | ์ค(Line)์ ์์์์ ์ผ์น /^abc/ |
$ | ์ค(Line)์ ๋์์ ์ผ์น /xyz$/ |
. | (ํน์๊ธฐํธ, ๋์ด์ฐ๊ธฐ๋ฅผ ํฌํจํ) ์์์ ํ ๋ฌธ์ |
a|b | a or b์ ์ผ์น, ์ธ๋ฑ์ค๊ฐ ์์ ๊ฒ์ ์ฐ์ ๋ฐํ |
* | 0ํ ์ด์ ์ฐ์์ผ๋ก ๋ฐ๋ณต๋๋ ๋ฌธ์์ ๊ฐ๋ฅํ ๋ง์ด ์ผ์น. {0,}์ ๋์ผ |
*? | 0ํ ์ด์ ์ฐ์์ผ๋ก ๋ฐ๋ณต๋๋ ๋ฌธ์์ ๊ฐ๋ฅํ ์ ๊ฒ ์ผ์น. {0,}์ ๋์ผ |
+ | 1ํ ์ด์ ์ฐ์์ผ๋ก ๋ฐ๋ณต๋๋ ๋ฌธ์์ ๊ฐ๋ฅํ ๋ง์ด ์ผ์น. {1,}์ ๋์ผ |
+? | 1ํ ์ด์ ์ฐ์์ผ๋ก ๋ฐ๋ณต๋๋ ๋ฌธ์์ ๊ฐ๋ฅํ ์ ๊ฒ ์ผ์น. {0}์ ๋์ผ |
{3} | ์ซ์ 3๊ฐ ์ฐ์ ์ผ์น |
{3,} | 3๊ฐ ์ด์ ์ฐ์ ์ผ์น |
{3, 5} | 3๊ฐ ์ด์ 5๊ฐ ์ดํ ์ฐ์ ์ผ์น |
() | ๊ฐญ์ณ(capture)ํ ๊ทธ๋ฃน |
[a-z] | a๋ถํฐ z ์ฌ์ด์ ๋ฌธ์ ๊ตฌ๊ฐ์ ์ผ์น(์์ด ์๋ฌธ์) |
[A-Z] | A๋ถํฐ Z ์ฌ์ด์ ๋ฌธ์ ๊ตฌ๊ฐ์ ์ผ์น(์์ด ๋๋ถ์) |
[0-9] | 0๋ถํฐ 9 ์ฌ์ด์ ๋ฌธ์ ๊ตฌ๊ฐ์ ์ผ์น(์ซ์) |
\(์ญ์ฌ๋์ฌ) | escape ๋ฌธ์. ํน์ ๊ธฐํธ ์์ \๋ฅผ ๋ถ์ด๋ฉด ์ ๊ท์ ํจํด์ด ์๋, ๊ธฐํธ ์์ฒด๋ก ์ธ์ |
\d | ์ซ์๋ฅผ ๊ฒ์ํจ. /[0-9]/์ ๋์ผ |
\D | ์ซ์๊ฐ ์๋ ๋ฌธ์๋ฅผ ๊ฒ์ํจ. /[^0-9]/์ ๋์ผ |
\w | ์์ด๋์๋ฌธ์, ์ซ์, (underscore)๋ฅผ ๊ฒ์ํจ. /[A-Za-z0-9]/์ ๋์ผ |
\W | ์์ด ๋์๋ฌธ์, ์ซ์, (underscore)๊ฐ ์๋ ๋ฌธ์๋ฅผ ๊ฒ์ํจ. /[^A-Za-z0-9]/์ ๋์ผ |
[^] | []์์ ๋ฌธ์์ด ์์ ^์ด ์ฐ์ด๋ฉด, []์์ ์๋ ๋ฌธ์๋ฅผ ๊ฒ์ํจ |
Anchors - ^ and $
^๋ ๋ฌธ์์ด์ ์ฒ์์ ์๋ฏธํ๊ณ , ๋ฌธ์์ด์์ ^๋ค์ ๋ถ์ ๋จ์ด๋ก ์์ํ๋ ๋ถ๋ถ์ ์ฐพ๋๋ค. ์ผ์นํ๋ ๋ถ๋ถ์ด ์์ด๋๋ผ๋, ๊ทธ ๋ถ๋ถ์ด ๋ฌธ์์ด์ ์์ ๋ถ๋ถ์ด ์๋๋ฉด null์ ๋ฆฌํดํ๋ค.
"coding is fun".match(/^co/); // ['co']
"coding is fun".match(/^fun/); // null
$๋ ๋ฌธ์์ด์ ๋์ ์๋ฏธํ๊ณ , ๋ฌธ์์ด์์ $์์ ํํ์์ผ๋ก ๋๋๋ ๋ถ๋ถ์ ์ฐพ๋๋ค. ^์ ๋น์ทํ์ง๋ง ^๋ ๋ฌธ์์ด์ ์์์ ์ฐพ๊ณ , $๋ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋ถ๋ถ์ ์ฐพ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ผ์นํ๋ ๋ถ๋ถ์ด ์๋๋ผ๋, ๊ทธ ๋ถ๋ถ์ด ๋ฌธ์์ด์ ๋๋ถ๋ถ์ด ์๋๋ฉด null์ ๋ฆฌํดํ๋ค.
"coding is fun".match(/un$/); // ['un']
"coding is fun".match(/is$/); // null
"coding is fun".match(/^coding is fun$/);
// ๋ฌธ์์ด์ ^ ์ $ ๋ก ๊ฐ์ธ์ฃผ๋ฉด ๊ทธ ์ฌ์ด์ ๋ค์ด๊ฐ ๋ฌธ์์ด๊ณผ ์ ํํ๊ฒ ์ผ์นํ๋ ๋ถ๋ถ์ ์ฐพ๋๋ค.
// ["coding is fun"]
Quantifiers —*, +, ? and {}
*๋ *๋ฐ๋ก ์์ ๋ฌธ์๊ฐ 0๋ฒ ์ด์ ๋ํ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ฒ์ํ๋ค. ์๋์ ๊ฐ์ ๋ฌธ์์ด์ด ์์ ๋์ /ode*/g ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด "od"๊ฐ ๋ค์ด๊ฐ๋ฉด์ ๊ทธ ๋ค์ "e"๊ฐ 0๋ฒ ์ด์ ํฌํจ๋ ๋ชจ๋ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ค.
"co cod code codee coding codeeeeee codingding".match(/ode*/g);
// ["od", "ode", "odee", "od", "odeeeeee", "od"]
+๋ *์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํ๊ณ , ๋ค๋ง + ๋ฐ๋ก ์์ ๋ฌธ์๊ฐ 1๋ฒ ์ด์ ๋ํ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ฒ์ํ๋ค๋ ์ ์ด *๊ณผ ๋ค๋ฅผ ๋ฟ์ด๋ค.
"co cod code codee coding codeeeeee codingding".match(/ode*/g);
// ["ode", "odee", "odeeeeee"]
?๋ * ๋๋ +์ ๋น์ทํ์ง๋ง, ? ์์ ๋ฌธ์๊ฐ 0๋ฒ ํน์ 1๋ฒ ๋ํ๋๋ ๊ฒฝ์ฐ๋ง ๊ฒ์ํ๋ค. *? ๋๋ +?์ ๊ฐ์ด ?๋ * ํน์ +์ ํจ๊ป ์ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
"co cod code codee coding codeeeeee codingding".match(/ode?/g);
// ["od", "ode", "ode", "od", "ode", "od"]
"co cod code codee coding codeeeeee codingding".match(/ode*?/g);
// ["od", "od", "od", "od", "od", "od"]
"co cod code codee coding codeeeeee codingding".match(/ode+?/g);
// ["ode", "ode", "ode"]
{}sms *, *?, +, +?์ ํ์ฅํ์ผ๋ก ์๊ฐํ ์ ์๋ค, *, *?, +, +?๊ฐ '0๊ฐ ์ด์' ๋๋ '1๊ฐ ์ด์' ๊ฒ์์ด ์ ๋ถ์๋ ๋ฐ๋ฉด, {}๋ ์ง์ ์ซ์๋ฅผ ๋ฃ์ด์ ์ฐ์๋๋ ๊ฐ์๋ฅผ ์ค์ ํ ์ ์๋ค.
"co cod code codee coding codeeeeee codingding".match(/ode{2}/g);
// 2๊ฐ์ "e"๋ฅผ ํฌํจํ ๋ฌธ์์ด์ ๊ฒ์ํ๋ค.
// ["odee", "odee"]
"co cod code codee coding codeeeeee codingding".match(/ode{2,}/g);
// 2๊ฐ ์ด์์ "e"๋ฅผ ํฌํจํ ๋ฌธ์์ด์ ๊ฒ์ํ๋ค.
// ["odee", "odeeeeee"]
"co cod code codee coding codeeeeee codingding".match(/ode{2,5}/g);
// 2๊ฐ ์ด์ 5๊ฐ ์ดํ์ "e"๋ฅผ ํฌํจํ ๋ฌธ์์ด์ ๊ฒ์ํ๋ค.
// ["odee", "odeeeee"]
OR operator
|๋ or ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ์ฌ |์ ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
"Cc Oo Dd Ee".match(/O|D/g); // ["O", "D"]
"Cc Oo Dd Ee".match(/c|e/g); // ["c", "e"]
"Cc Oo Dd Ee".match(/D|e/g); // ["D", "e"]
"Ccc Ooo DDd EEeee".match(/D+|e+/g); // + ๋ 1๋ฒ ์ด์ ๋ฐ๋ณต์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์
// ["DD", "eee"] ๋ฅผ ๋ฐํํ๋ค.
Bracket Operator - []
๋๊ดํธ []์์ ๋ช ์๋ ๊ฐ์ ๊ฒ์ํ๋ค.
[abc] // a or b or c ๋ฅผ ๊ฒ์ํฉ๋๋ค. or(|) Operator ๋ก ์์ฑํ a|b|c ์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค.
[a-c] // [abc] ์ ๋์ผํฉ๋๋ค. - ๋ก ๊ฒ์ ๊ตฌ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
"Ccc Ooo DDd EEeee".match(/[CD]+/g); // [] ์ + ๋ฑ์ ๊ธฐํธ๋ฅผ ํจ๊ป ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
// C or D ๊ฐ ํ ๋ฒ ์ด์ ๋ฐ๋ณต๋ ๋ฌธ์์ด์ ๋ฐ๋ณต ๊ฒ์ํ๊ธฐ ๋๋ฌธ์
// ["C", "DD"] ๊ฐ ๋ฐํ๋ฉ๋๋ค.
"Ccc Ooo DDd EEeee".match(/[co]+/g); // ["cc", "oo"]
"Ccc Ooo DDd EEeee".match(/[c-o]+/g); // - ๋๋ฌธ์ c ~ o ๊ตฌ๊ฐ์ ๊ฒ์ํ์ฌ
// ["cc", "oo", "d", "eee"] ๊ฐ ๋ฐํ๋๋ค.
"AA 12 ZZ Ad %% Az !# dd 54 zz".match(/[A-Za-z]+/g);
// a~z ๋๋ A~Z ์์ ํ ๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ๋ฐ๋ณต ๊ฒ์ํ๊ธฐ ๋๋ฌธ์
// ["AA", "ZZ", "Ad", "Az", "dd", "zz"] ๋ฅผ ๋ฐํํ๋ค.
"AA 12 ZZ Ad %% Az !# dd 54 zz".match(/[A-Z]+/gi);
// flag i ๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
// ["AA", "ZZ", "Ad", "Az", "dd", "zz"]
"AA 12 ZZ Ad %% Az !# dd 54 zz".match(/[0-9]+/g);
// ์ซ์๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค.
// ["12", "54"]
"aAbB$#67Xz@9".match(/[^a-zA-Z]+/g);
// [] ์์ ^ ๋ฅผ ์ฌ์ฉํ๋ฉด anchor ๋ก์์ ๋ฌธ์์ด์ ์ฒ์์ ์ฐพ๋๊ฒ์ด ์๋
// ๋ถ์ ์ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ [] ์์ ์๋ ๊ฐ์ ๊ฒ์ํ๋ค.
// ["$#67", "@9"]
Character classes
\d์ d๋ digit์ ์๋ฏธํ๋ฉฐ 0 ~ 9 ์ฌ์ด์ ์ซ์ ํ๋๋ฅผ ๊ฒ์ํ๋ค. [0-9]์ ๋์ผํ๋ค.
\D๋ not Digit์ ์๋ฏธํ๋ฉฐ, ์ซ์๊ฐ ์๋ ๋ฌธ์ ํ๋๋ฅผ ๊ฒ์ํ๋ค. [^0-9]์ ๋์ผํ๋ค.
"abc34".match(/\d/); // ["3"]
"abc34".match(/[0-9]/) // ["3"]
"abc34".match(/\d/g); // ["3", "4"]
"abc34".match(/[0-9]/g) // ["3", "4"]
"abc34".match(/\D/); // ["a"]
"abc34".match(/[^0-9]/); // ["a"]
"abc34".match(/\D/g); // ["a", "b", "c"]
"abc34".match(/[^0-9]/g); // ["a", "b", "c"]
\w๋ ์ํ๋ฒณ ๋์๋ฌธ์, ์ซ์, _(underbar) ์ค ํ๋๋ฅผ ๊ฒ์ํ๋ค. [a-zA-Z0-9_]์ ๋์ผํ๋ค.
\W๋ ์ํ๋ฒณ ๋์๋ฌธ์, ์ซ์, _(underbar)๊ฐ ์๋ ๋ฌธ์ ํ๋๋ฅผ ๊ฒ์ํ๋ค. [^a-zA-Z0-9_]์ ๋์ผํ๋ค.
"ab3_@A.Kr".match(/\w/); //["a"]
"ab3_@A.Kr".match(/[a-zA-Z0-9_]/) // ["a"]
"ab3_@A.Kr".match(/\w/g); //["a", "b", "3", "_", "A", "K", "r"]
"ab3_@A.Kr".match(/[a-zA-Z0-9_]/g) // ["a", "b", "3", "_", "A", "K", "r"]
"ab3_@A.Kr".match(/\W/); // ["@"]
"ab3_@A.Kr".match(/[^a-zA-Z0-9_]/); // ["@"]
"ab3_@A.Kr".match(/\W/g); // ["@", "."]
"ab3_@A.Kr".match(/[^a-zA-Z0-9_]/g); // ["@", "."]
Grouping and capturing
()๋ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๋๋ค๋ ์๋ฏธ ์ด์ธ์๋ ๋ค๋ฅธ ๋ช๊ฐ์ง ์๋ฏธ๊ฐ ๋ ์๋ค.
๊ทธ๋ฃนํ
ํํ์์ ์ผ๋ถ๋ฅผ ()๋ก ๋ฌถ์ด์ฃผ๋ฉด ๊ทธ ์์ ๋ด์ฉ์ ํ๋๋ก ๊ทธ๋ฃนํํ ์ ์๋ค.
let co = 'coco';
let cooo = 'cooocooo';
co.match(/co+/); // ["co", index: 0, input: "coco", groups: undefined]
cooo.match(/co+/); // ["cooo", index: 0, input: "cooocooo", groups: undefined]
co.match(/(co)+/); // ["coco", "co", index: 0, input: "coco", groups: undefined]
cooo.match(/(co)+/); // ["co", "co", index: 0, input: "cooocooo", groups: undefined]
co+๋ 'c'๋ฅผ ๊ฒ์ํ๊ณ +๊ฐ 'o'๋ฅผ 1ํ ์ด์ ์ฐ์์ผ๋ก ๋ฐ๋ณต๋๋ ๋ฌธ์๋ฅผ ๊ฒ์ํด ์ฃผ๊ธฐ ๋๋ฌธ์ 'cooo'๊ฐ ๋ฐํ๋๋ค. ํ์ง๋ง (co)+๋ 'c'์ 'o'๋ฅผ ๊ทธ๋ฃนํํ์ฌ 'co'๋ฅผ ๋จ์๋ก 1ํ ์ด์ ๋ฐ๋ณต์ ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ 'coco'๊ฐ ๋ฐํ๋๋ค.
์บก์ฒ
()๋ก ๊ทธ๋ฃนํํ๋ค๊ณ ํ๊ณ , ์ด๋ฅผ ์บก์ฒํ๋ค๋ผ๊ณ ํ๋ค.
co.match(/(co)+/); // ["coco", "co", index: 0, input: "coco", groups: undefined]
- ()๋ก 'co'๋ฅผ ์บก์ฒ
- ์บก์ฒํ 'co'๋ ์ผ๋จ ๋น์ฅ ์ฌ์ฉํ์ง ์๊ณ , +๊ฐ 'co'์ 1ํ ์ด์ ์ฐ์ ๋ฐ๋ณต์ ๊ฒ์
- ์ด๋ ๊ฒ ์บก์ฒ ์ด์ธ ํํ์์ด ๋ชจ๋ ์๋ํ๊ณ ๋๋ฉด, ์บก์ฒํด ๋์๋ 'co'๋ฅผ ๊ฒ์
๋ฐ๋ผ์ 2๋ฒ ๊ณผ์ ์ ์ํด 'coco'๊ฐ ๋ฐํ๋๊ณ , 3๋ฒ์ ์ํด 'co'๊ฐ ๋ฐํ๋๋ ๊ฒ์ด๋ค.
"2021code".match(/(\d+)(\w)/);
// ["2021c", "2021", "c", index: 0, input: "2021code", groups: undefined]
- ()์์ ํํ์์ ์์๋๋ก ์บก์ฒ => \d+์ \w
- ์บก์ฒ ํ ๋จ์ ํํ์์ผ๋ก ๊ฒ์ => ์ด๋ฒ ์์์๋ ๋จ์ ํํ์์ ์๋ค.
- \d๋ก ์ซ์๋ฅผ ๊ฒ์ํ๋ +๋ก 1๊ฐ ์ด์ ์ฐ์๋๋ ์ซ์๋ฅผ ๊ฒ์ => 2021
- \w๋ก ๋ฌธ์๋ฅผ ๊ฒ์ => c
- 3๋ฒ๊ณผ 4๋ฒ์ด ์กฐํฉ๋์ด '2020c'๊ฐ ๋ฐํ
- ์ฒซ ๋ฒ์งธ ์บก์ฒํ (\d+)๋ก ์ธํด 2021์ด ๋ฐํ
- ๋ ๋ฒ์งธ ์บก์ฒํ (\w)๋ก ์ธํด 'c'๊ฐ ๋ฐํ
๋ฌธ์์ด ๋์ฒด ์ ์บก์ฒ๋ ๊ฐ ์ฐธ์กฐ
์บก์ฒ๋ ๊ฐ์ replace() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ์นํ ์ ์ฐธ์กฐ ํจํด์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ค.
"code.states".replace(/(\w+)\.(\w+)/, "$2.$1"); //states.code
์ฐ์ ์ฒซ ๋ฒ์งธ (\w+) ๊ฐ code ๋ฅผ ์บก์ฒํ๊ณ , ๋ ๋ฒ์งธ (\w+) ๊ฐ states ๋ฅผ ์บก์ฒํฉ๋๋ค. ( /(\w+)\ ์ (\w+)/\์ฌ์ด์ . ์ . ์์ ์ญ์ฌ๋์๊ฐ ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์ '์์์ ํ ๋ฌธ์'๊ฐ ์๋ ๊ธฐํธ๋ก์์ ์จ์ . ์ ์๋ฏธํฉ๋๋ค.) ๊ฐ ์บก์ฒ๋ ๊ฐ์ ์ฒซ ๋ฒ์งธ๋ $1 ์ด ์ฐธ์กฐ, ๋ ๋ฒ์งธ๋ $2 ์ด ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์ด ์ฐธ์กฐ๋ ๊ฐ์ "$2.$1" ์ด ๋์ฒดํ๊ฒ ๋์ด code ์ states ๊ฐ ๋ค๋ฐ๋ "states.code" ๊ฐ ๋ฐํ๋ฉ๋๋ค.
non-capturing
()๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฃนํ์ ์บก์ฒ๋ฅผ ํ๋ค๊ณ ํ๋ค. ํ์ง๋ง (?:)๋ก ์ฌ์ฉํ๋ฉด ๊ทธ๋ฃน์ ๋ง๋ค์ง๋ง ์บก์ฒ๋ ํ์ง ์๋๋ค.
let co = 'coco';
co.match(/(co)+/); // ["coco", "co", index: 0, input: "coco", groups: undefined]
co.match(/(?:co)+/);
// ["coco", index: 0, input: "coco", groups: undefined]
lookahead
(?=)๋ ๊ฒ์ํ๋ ค๋ ๋ฌธ์์ด์ (?=์ฌ๊ธฐ)์ ์ผ์นํ๋ ๋ฌธ์๊ฐ ์์ด์ผ (?=์ฌ๊ธฐ)์์ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
"abcde".match(/ab(?=c)/);
// ab ๊ฐ c ์์ ์๊ธฐ ๋๋ฌธ์ ["ab"] ๋ฅผ ๋ฐํํ๋ค.
"abcde".match(/ab(?=d)/);
// d ์ ์์ "abc" ์ด๊ธฐ ๋๋ฌธ์ null ์ ๋ฐํํ๋ค.
negated lookahead
(?!)๋ (?=)์ ๋ถ์ ์ด๋ค.
"abcde".match(/ab(?!c)/); // null
"abcde".match(/ab(?!d)/); // ["ab"]
์ ๊ทํํ์์ ์์ฉ์ ํตํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฟ ์๋๋ผ ๋ฐ์ดํฐ ์คํฌ๋ํ, ๋ฌธ์์ด ํ์ฑ ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ์ํฉ์์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ๋ฒ์ ์์งํด ๋์ผ๋ฉด ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ ๋์ฑ ๋ค์ํ ํด๊ฒฐ ์์ด๋์ด๋ฅผ ์ป์ ์ ์๋ค.
์ ๊ทํํ์์ ์ ๋ฆฌํ์ ํด๋๊ณ ๋ฏธ๋ฃจ๋ค๊ฐ ๊ฒฐ๊ตญ Code States์์ ๋ค๋ฃจ๋ ๋ถ๋ถ์ด ์์๋ค. ์์ ๋ด์ฉ์ ๋จ์ํ Code States์ ์์ฑ๋ ๋ด์ฉ์ ์ฎ๊ฒจ ์ ์ ๊ฒ์ด์ง๋ง, ๋์ค์ ์ฌ์ฉํด๋ณด๊ณ ์ค์ค๋ก ์ ๋ฆฌํด๋๋ ์๊ฐ์ ๊ฐ๋๋ก ํด์ผ๊ฒ ๋ค.