string.matchAll()
matchAll() ๋ฉ์๋๋ ๊ทธ๋ฃน์บก์ณ๋ฅผ ํฌํจํ์ฌ ์ ๊ท์์ ๋ํ ๋ฌธ์์ด๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ณต์(iterator) object๊ฐ ๋ฐํํ๋ค.
let regexp = /t(e)(st(\d?))/g;
let str = 'test1test2';
let array = [...str.matchAll(regexp)];
/*
str.matchAll(regexp)๋ฅผ console์ ์ฐ์ผ๋ฉด..
RegExpStringIterator {}
__proto__: RegExp String Iterator
next: ฦ next()
Symbol(Symbol.toStringTag): "RegExp String Iterator"
__proto__: Object
*/
array[0]; // ["test1", "e", "st1", "1", index: 0, input: "test1test2", groups: undefined]
array[1]; // ["test2", "e", "st2", "2", index: 5, input: "test1test2", groups: undefined]Syntax
str.matchAll(regexp)Parameters
regexp
์ ๊ท ํํ์ ๊ฐ์ฒด
๋น ์ ๊ท์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค๋ฉด, ์ด๊ฒ์ newExp(obj) ๋ฅผ ์ด์ฉํ์ฌ RegExp ๋ก ๋ณํ๋๋ค.
RegExp ๊ฐ์ฒด๋ ๋ฌด์กฐ๊ฑด /g ํ๋๊ทธ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ์๋๋ฉด TypeError ๋ฅผ ๋์ง๋ค. (๋น์ฐ All์ด๋๊น)
Return value
iterator (์ฌ์์ ๋ฐ๋ณต์ ๋ถ๊ฐ๋ฅํ๋ค)
Examples
Regexp.exec() ์ matchAll()
MatchAll ๋ฅผ JavaScript์ ์ถ๊ฐํ๊ธฐ ์ ์ ๋ชจ๋ ์ผ์น ํญ๋ชฉ์ ์ป๊ธฐ ์ํด์๋ ๋ฃจํ์์ regexp.exec(๋ฐ /g ํ๋๊ทธ๊ฐ ์๋ regexe) ํธ์ถํ์ฌ ์ฌ์ฉํ ์ ์์๋ค.
MatchAll ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด while loop์ g ํ๋๊ทธ์ ํจ๊ป exec ํผํ ์ ์๋ค.
๋์ ์ matchAll ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํธ๋ฆฌํ array spread ๋ Array.from() , for...of ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์(iterator) ๋ฅผ ์ป์ ์ ์๋ค.
matchAll ์ g ํ๋๊ทธ๊ฐ ์๋ค๋ฉด TypeError๊ฐ ๋ฐ์ํ๋ค.
matchAll ์ regexp.exec() ์ ๋ฌ๋ฆฌ ๋ด๋ถ์ ์ผ๋ก regexp ๋ฅผ cloneํ์ฌ ๋ง๋ ๋ค. lastIndex ๋ ๋ฌธ์์ด์ ์ค์บํ ๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
lastIndex
์ฝ๊ธฐ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์์ฑ, ๋งค์นญ์ ์์ํ ์์น๋ฅผ ์ง์ ํ๋ค.
์บก์ณ ๊ทธ๋ฃน์ ๋ ์์ธ์ค ํฅ์ (String.prototype.match() ๋ณด๋ค)
matchAll ์ด ์ค๋๋ ฅ ์๋ ์ด์ ๋ ์บก์ณ ๊ทธ๋ฃน์ ํฅ์๋ ์ ๊ทผ์ด๋ค.
match() ๋ /g ํ๋๊ทธ์ ํจ๊ป ์ฐ์ผ ๋ ์บก์ณ ๊ทธ๋ฃน์ ๋ฌด์๋๋ค.
matchAll ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์บก์ณ ๊ทธ๋ฃน์ ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค.
Browser compatibility
IE์ Safari์์ ์ง์ ์๋จ.
๋ชจ๋ฐ์ผ์์ Safari์ Samsung Internet์์ ์ง์์ด ์๋๋ค.
Last updated
Was this helpful?