[JS] ์ ๊ท์์ ๊ทธ๋ฃนํ(Grouping) / ์บก์ฒํ(Capturing) ํ์ฉํ๊ธฐ
๊ทธ๋ฃนํ / ์บก์ฒํ
๊ทธ๋ฃนํ Grouping
์ ๊ท์์์ ๊ทธ๋ฃนํ๋ ํน์ ๋ฌธ์๋ค์ ๋จ์ผ ํํ์(Single Entity)์ผ๋ก ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๊ทธ๋ฃนํ๋ ๋ณดํต ์บก์ฒ๋ง๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฏ๋ก ์ด ๋์ ํจ๊ป ์์๋๋ ๊ฒ์ด ์ข๋ค.
์๋ ์์์์ ์ฌ์ฉํ +
์๋์๋ 1๋ฒ ์ด์ ๋ฐ๋ณตํ๋ ๋ฌธ์์ด์ ์ฐพ๋๋ค. ๋ฐ๋ผ์ ab
(b
1๋ฒ ์ผ์น), abb
(b
2๋ฒ ์ผ์น) ๋ฑ์ ๋ชจ๋ ์ผ์นํ๋ค๊ณ ํ๋จํ๋ค.
const str = 'aabbbababaabb';
str.match(/ab+/g); // ['abbb', 'ab', 'ab', 'abb']
ํน์ ๋ฌธ์ ๊ทธ๋ฃน์ ๋ฐ๋ณต ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ค๋ฉด ์๊ดํธ()
๋ฅผ ์ฌ์ฉํด ๊ทธ๋ฃนํํ๋ฉด ๋๋ค. ๊ทธ๋ฃนํํ๋ฉด ๊ดํธ ์ ๋ฌธ์๋ฅผ ํ๋์ ๋จ์ผ ํํ์์ผ๋ก ์ ์ํ๋ค. ์๋ ์์์์ (ab)
๋ก ๋ฌถ์์ผ๋ฏ๋ก ab
๊ฐ 1๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ๋ฌธ์๋ฅผ ์ฐพ๋๋ค.
const str = 'aabbbababaabb';
str.match(/(ab)+/g); // ['ab', 'abab', 'ab']
์บก์ฒํ Capturing
๐ก ์์ ๋ณ์(\1
, \2
๋ฑ)๋ฅผ ์ ๊ท์ ๋ด์์ ๋ค์ ํธ์ถํ๋ ๊ฒ์ ์ญ์ฐธ์กฐ(Back Reference)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์บก์ฒํ๋ ๊ดํธ๋ก ๋ฌถ์ ๋จ์ผ ํํ์์ \1
, \2
๊ฐ์ ์์ ๋ณ์์ ์ ์ฅํ ํ ์ฐธ์กฐํ ์ ์๋ ๊ฒ์ ๋งํ๋ค. ๋ณ์๋ ๋ฐ → ์, ์ข → ์ฐ ์์๋ก ์ ์ฅํ๋ค(์ ๊ท์ ์คํ ์์). ์๋ ์์์์ \1
๋ณ์์ a
, \2
๋ณ์์ b
๋ฅผ ์ ์ฅํ์ผ๋ฏ๋ก abab
์ ์ผ์นํ๋ ๋ฌธ์์ด์ ์ฐพ๋๋ค.
const str = 'aabbbababaabb';
str.match(/(a)(b)\1\2/); // ['abab', 'a', 'b', index: 5, input: 'aabbbababaabb', groups: undefined]
str.match
๋ฉ์๋์ ์บก์ฒ ๊ทธ๋ฃน์ด ์์ผ๋ฉด, ์ ์ฒด ์ ๊ท์ ์คํ ๊ฒฐ๊ณผ๊ฐ๊ณผ ์บก์ฒ ๊ทธ๋ฃน ๊ฒฐ๊ณผ๊ฐ์ ํจ๊ป ํฌํจํ๋ค.
- (์ธ๋ฑ์ค 0)
str.match
๊ฒฐ๊ณผ๊ฐ :'abab'
- (์ธ๋ฑ์ค 1) 1๋ฒ ์บก์ฒ ๊ทธ๋ฃน
\1
๊ฒฐ๊ณผ๊ฐ :'a'
- (์ธ๋ฑ์ค 2) 2๋ฒ ์บก์ฒ ๊ทธ๋ฃน
\2
๊ฒฐ๊ณผ๊ฐ :'b'
์๋ ์์์์ \1
๋ณ์์ ๊ทธ๋ฃนํํ ๋ฌธ์ ab
๋ฅผ ์ ์ฅํ๋ค. (ab)\1
→ (ab)(ab)
์ด๋ฏ๋ก abab
๋ฅผ ์ฐพ๋๋ค.
const str = 'aabbbababaabb';
str.match(/(ab)\1/); // ['abab', 'ab', index: 5, input: 'aabbbababaabb', groups: undefined]
์๊ดํธ๋ฅผ ์ฌ์ฉํด ๊ทธ๋ฃนํํ๋ฉด ๊ทธ๋ฃนํ๋จ๊ณผ ๋์์ ์บก์ฒํ๊ฐ ์ด๋ค์ง๋ค. ๊ทธ๋ฃนํ๋ง ํ์ํ๊ณ ์บก์ฒํ๊ฐ ํ์ ์๋ค๋ฉด ๊ดํธ ์์ชฝ ์์ ์ง์ ์ ?:
๋ฅผ ์ถ๊ฐํด์ ์บก์ฒํ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
const str = 'aabbbababaabb';
str.match(/(?:ab)+/g); // ['ab', 'abab', 'ab']
์์ฉํ๊ธฐ
๐ก ํ๋ก๊ทธ๋๋จธ์ค ์น์์ด(2) ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์๊ณผ ์ ์ฌ
๋ฌธ์์ด์ ํน์ ๋จ์ด๋ฅผ ํฌํจํ๋์ง ํ์ธํ ๋ ๊ทธ๋ฃนํ / ์บก์ฒํ๋ฅผ ํ์ฉํ ์ ์๋ค. ์๋ฅผ๋ค์ด one
ํน์ two
๋ฌธ์๋ฅผ *
๋ก ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ ์๋์ฒ๋ผ ์์ฑํ ์ ์๋ค.
const str = 'abconedeftwoghy';
str.replaceAll(/(one|two)/g, '*'); // 'abc*def*ghy'
oneoneone
์ฒ๋ผ 2๋ฒ ์ด์ ์ค๋ณต๋ ๋จ์ด๋ฅผ ์ฐพ์ ๋ ์บก์ฒ ๊ทธ๋ฃน์ ํ์ฉํ ์๋ ์๋ค. ์๋ ์์์์ one
๋ฌธ์๋ \1
๋ณ์์ ์ ์ฅํ๋ฏ๋ก (one)\1+
→ (one)(one)+
์ ๋์ผํ๋ค๊ณ ๋ณผ ์ ์๋ค. ์ฆ, ์์ one
์ด ํ๋ ์๊ณ , ๊ทธ ๋ค์ 1๊ฐ ์ด์์ one
์ด ์์ผ๋ฉด ์ผ์นํ๋ค๊ณ ํ๋จํ๋ค.
'abconeoneonedefghy'.replaceAll(/(one)\1+/g, '1'); // 'abc1defghy'
'abconeonedefghy'.replaceAll(/(one)\1+/g, '1'); // 'abc1defghy'
'abconedefghy'.replaceAll(/(one)\1+/g, '1'); // 'abconedefghy' (์ผ์นํ๋ ๋ฌธ์ ์์)
์ฐธ๊ณ ๋ก {n, }
์๋์๋ฅผ ์ฌ์ฉํด๋ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค. n ๋ค์ ์ผํ๊ฐ ์๋ {n}
์๋์์๋ ๋ค๋ฅด๋ฏ๋ก ์ฃผ์ํ์.
'abconeoneonedefghy'.replaceAll(/(one){2,}/g, '1'); // 'abc1defghy'
'abconeonedefghy'.replaceAll(/(one){2,}/g, '1'); // 'abc1defghy'
'abconedefghy'.replaceAll(/(one){2,}/g, '1'); // 'abconedefghy' (์ผ์นํ๋ ๋ฌธ์ ์์)
{n, }
: n๋ฒ ์ด์ ์ผ์น{n}
: ์ ํํ n๋ฒ ์ผ์น
ํ - ํ์์ ์ธ ์ ๊ท์
์ ๊ท์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์์ (Greedy)์ด๋ค. ๋๋ฌธ์ ๋งค์นญํ ๋ฌธ์ ์ค ๋ ๋ง๊ณ ๊ธด ๊ฐ์ ๋ฐํํ๋ค. ์๋ ์ฝ๋์์ ?
์ต์
๋ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ab
, abc
๋ชจ๋ ์ผ์นํ๋ ๋ฌธ์๋ฅผ ์ฐพ๋๋ค. ํ์ง๋ง ์ ๊ท์์ ํ์์ ์ด๋ฏ๋ก ๋ ๊ธด ๊ฐ์ธ abc
๋ฅผ ๋ฐํํ๊ณ ์๋ค.
const str = 'abc';
str.match(/abc?/); // ['abc', index: 0, input: 'abc', groups: undefined]
๋ฐ๋ฉด ์๋์ ๋ค์ ?
๋ฅผ ๋ถ์ด๋ฉด ํ์์ ์ด์ง ์๊ฒ(Lazy) ์๋ํ์ฌ ๋ ์งง๊ณ ์ ์ ๊ฐ์ ๋ฐํํ๋ค.
const str = 'abc';
str.match(/abc??/); // ['ab', index: 0, input: 'abc', groups: undefined]
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ (0) | 2024.05.19 |
---|---|
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน (0) | 2024.05.18 |
[React] ๋์์ ํจ๊ณผ Algebraic Effect (0) | 2024.05.18 |
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช ํ๊ธฐ (0) | 2024.05.18 |
[CS] ์ค๋ฒํค๋ / ํ๋ก์ธ์ค / ์ค๋ ๋ (1) | 2024.05.18 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ
2024.05.19 -
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน
2024.05.18 -
[React] ๋์์ ํจ๊ณผ Algebraic Effect
[React] ๋์์ ํจ๊ณผ Algebraic Effect
2024.05.18 -
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช ํ๊ธฐ
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช ํ๊ธฐ
2024.05.18