string.match
match()
๋ฉ์๋๋ ๋ฌธ์์ด์์ ์ ๊ท์๊ณผ ๋งค์น๋๋ ๋ถ๋ถ์ ๊ฒ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค.
const paragraph = 'Cats are the best';
const regex = /[A-Z]/g;
const found = paragraph.match(regex);
found; // ["C"]
Syntax
str.match(regexp)
Parameters
regexp
์ ๊ท์ ๊ฐ์ฒด์ด๋ค.
regexp๊ฐ ์ ๊ท์ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ, new RegExp(regexp)
๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ผ๋ก RegExp๋ก ๋ณํ
์ธ์๋ฅผ ๋๊ธฐ์ง ์๊ณ match()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋ฌธ์์ด์ ๊ฐ์ง Array ['']
์ด ๋ฐํ๋๋ค.
return value
global(g) flag์ ๋ฐ๋ฅธ ๋ค๋ฅธ ๊ฒฐ๊ณผ์ Array
, ๋งค์น๋๋ ๊ฒฐ๊ณผ๊ฐ ์๋ค๋ฉด null
g
flag๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ์ ์ฒด ์ ๊ท ํํ์๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง๋ง, ์บก์ณ๊ทธ๋ฃน์ ๋ฐํํ์ง ์๋๋ค.g
flag๊ฐ ์๋ค๋ฉด ์ฒ์ ์ผ์นํ๊ฒ๊ณผ ๊ทธ์ ๋ํ ์บก์ณ ๊ทธ๋ฃน์ ๋ฐํํ๋ค.RegExp.exec()
์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. ๋ฐํ๋ ์์๋ ๋ค์ ๐ ์๋์ ๊ฐ์ ์ถ๊ฐ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋ค.
global(g) flag
์ ์ฒด ํ๋ณ, ์ฒ์ ์ผ์น์์ ์ค๋จํ์ง ์๊ณ , ๋ฌธ์์ด ์ ์ฒด๋ฅผ ํ๋ณํ๋ค.
์บก์ณ๋ง ๊ทธ๋ฃน(capturing group)
๊ดํธ๋ฅผ ๋๋ฌ์ผ ์์ญ์ด๋ค. ๊ฒฐ๊ณผ๊ฐ์ ์ฒซ๋ฒ์งธ์ ๋งค์นญ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ๊ณ ๊ทธ ํ๋ถํด ์บก์ณ๋ง ๊ทธ๋ฃน ์์ ์๋ ๋ฌธ์์ด์ด ์ฐจ๋ก๋๋ก ๋ค์ด๊ฐ๋ค. ์บก์ณ๋ง ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด ํจํด ์์ ์ํ๋ ๋ถ๋ถ์ ํธ๋ฆฌํ๊ฒ ๋ถ๋ฆฌํ ์ ์๋ค.
(?x)
x์ ๋งค์นํ๊ณ ์ผ๋ก ๋ช ๋ช ๋ ์ด๋ฆ์ผ๋ก ๋งค์น๋ ๋ฐํ๊ฐ์ด ๊ทธ๋ฃน ํ๋กํผํฐ๋ก ์ ์ฅ๋๋ค.
('<'๊ณผ '>')์ ๊ทธ๋ฃน๋ช ์ ํ์๋ค.
์๋ฅผ ๋ค์ด ์ ํ๋ฒํธ์์ ๋ฏธ๊ตญ์ ์ง์ญ ์ฝ๋๋ฅผ ๊บผ๋ผ ๋ /((?\d\d\d))/์ ์ฌ์ฉํ ์ ์๊ณ ๊ฒฐ๊ณผ๋ฒํธ๋ matches.groups.area ์ ํ์๋๋ค.
const str = "Cats are the best. The cat will rule the universe.";
const regexpWithoutE = /\b[a-df-z]+\b/ig;
str.match(regexpWithoutE); // ["Cats", "cat", "will"]
const imageDescription = "์ด ์ด๋ฏธ์ง์ ํด์๋๋ 1440ร900 ์ด๋ค.";
const regexpSize = /([0-9]+)ร([0-9]+)/;
const match = imageDescription.match(regexpSize); // ["1440ร900", "1440", "900", index: 12, input: "์ด ์ด๋ฏธ์ง์ ํด์๋๋ 1440ร900 ์ด๋ค.", groups: undefined]
// ์ฒซ๋ฒ์งธ๋ ๋งค์นญ ๋ฌธ์์ด "1440ร900"
// ์บก์ณ๋ง ๊ทธ๋ฃน ์์ ์๋ ๋ฌธ์์ด์ด ์ฐจ๋ก๋ก ๋ค์ด๊ฐ match[1]๋ "1440", match[2]๋ 900
let re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
const result = '2015-01-02'.match(re);
result;
/* [ "2015-01-02", "2015", "01", "02"
groups: {year: "2015", month: "01", day: "02"},
index: 0,
input: "2015-01-02",
length: 4 ] */
g
flag๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
let re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const result = '2015-01-02'.match(re);
result;
// ["2015-01-02"]
// length: 1
๋ ผ-์บก์ณ๋ง ๊ทธ๋ฃน(non-capturing group)
?:
๊ธฐํธ๋ฅผ ์ถ๊ฐํ๋ฉด non-capturing ๊ทธ๋ฃน์ด ๋๋ค.
non-capturing group์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ถ๊ฐ๋์ง ์๋๋ค.
let re = /(?:\d{4})-(?:\d{2})-(?:\d{2})/u;
const result = '2015-01-02'.match(re);
result;
/* ["2015-01-02",
groups: undefined,
index: 0,
input: "2015-01-02",
length: 1] */
(?:x)
x์ ๋งค์น๋์ง๋ง, ๋งค์น๋ ๋ด์ฉ์ ๊ธฐ์ตํ์ง ๋ชปํ๋ค.
์ถ๊ฐ property
groups
key๊ฐ ์ด๋ฆ์ด๊ณ value๊ฐ ์บก์ณ๋ง ๊ทธ๋ฃน์ธ ๋ช
๋ช
๋ ์บก์ณ๋ง ๊ทธ๋ฃน์ object, ์บก์ณ๋ง ๊ทธ๋ฃน์ด ์ ์๋์ด ์์ง ์์ ๊ฒฝ์ฐ undefined
Description
์ ๊ท์์ g
flag๊ฐ ์๋ค๋ฉด, RegExp.exec()์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
Other methods
์ ๊ท์์ด ๋ฌธ์์ด๊ณผ ์ผ์นํ๋์ง ์์์ผ ํ ๋๋
RegExp
์ฌ์ฉํ๋ค.RegExp.test()
์ฒซ๋ฒ์งธ ์ผ์น ํญ๋ชฉ๋ง ์ฐพ์ผ๋ ค๋ฉด
RegExp.exec()
์บก์ฒ ๊ทธ๋ฃน์ ํ๋ณดํ๊ณ ๊ทธ๋ก๋ฒ ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ ค๋ฉด
RegExp.exec()
๋๋String.prototype.matchAll()
๋์ ์ฌ์ฉํ๋ค.
Examples
match() ์ฌ์ฉ
match()๋ฅผ ์ฌ์ฉํ์ฌ 'Chapter'
๋ผ๋ ๋จ์ด์ ์ ์ด์ด์ง๋ 1 ์ด์์ ์ซ์, ์์ซ์ ์ผ๋ก ์ซ์ํํ๊ฐ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ์ฐพ์
i
flag๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
const str = 'For more information, see Chapter 3.4.5.1';
const re = /see (chapter \d+(\.\d)*)/i;
const found = str.match(re);
found;
// ["see Chapter 3.4.5.1", "Chapter 3.4.5.1", ".1", index: 22, input: "For more information, see Chapter 3.4.5.1", groups: undefined]
// 'see Chapert 3.4.5.1' ์์ ํ ๋งค์น๋ ๋ถ๋ถ
// 'Chapter 3.4.5.1'๋ '(chapter \d+(\.\d)*)' ๋ถ๋ถ์ ์ํด ์บก์ณ๋จ
// .1'์ '(\.\d)' ๋ถ๋ถ์์ ์บก์ณ๋ ๋ง์ง๋ง ๊ฐ
// 'index' ์์๊ฐ 22๋ผ๋๊ฑด 22๋ฒ์งธ ์์น๋ถํฐ ์์ ํ ๋งค์น๋ ๋ฌธ์์ด์ด ๋ํ๋จ์ ์๋ฏธํ๋ค.
// 'input' ์์๋ ์
๋ ฅ๋ ์๋ ๋ฌธ์์ด์ ๋ํ๋
match()์ ํจ๊ป g
(๊ธ๋ก๋ฒ) ํ๋๊ทธ์ i
(๋์๋ฌธ์ ๋ฌด์) ํ๋๊ทธ ์ฌ์ฉํ๊ธฐ
g
(๊ธ๋ก๋ฒ) ํ๋๊ทธ์ i
(๋์๋ฌธ์ ๋ฌด์) ํ๋๊ทธ ์ฌ์ฉํ๊ธฐlet str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
let regexp = /[A-E]/gi;
let matches_array = str.match(regexp);
matches_array; // ["A", "B", "C", "D", "E", "a", "b", "c", "d", "e"]
๋งค๊ฐ๋ณ์ ์์ด match() ์ฌ์ฉํ๊ธฐ
let str = "๋งค๊ฐ๋ณ์ ์์ด ์ฌ์ฉํ๊ธฐ~";
str.match(); // [""]
๋น ์ ๊ทํํ์ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๊ธฐ
๋งค๊ฐ๋ณ์๊ฐ ๋ฌธ์์ด์ด๋ ์ซ์์ด๋ฉด, ํด๋น ๋งค๊ฐ๋ณ์๋ ๋ด๋ถ์ ์ผ๋ก new RegExp(obj)
๋ฅผ ์ฌ์ฉํ์ฌ RegExp
๋ก ๋ณํ๋๋ค. ๋ง์ฝ ๋งค๊ฐ๋ณ์๊ฐ ํ๋ฌ์ค ๊ธฐํธ์ ์ด์ด์ง๋ ์ซ์ํ์ด๋ผ๋ฉด, RegExp() ๋ฉ์๋๋ ํ๋ฌ์ค ๊ธฐํธ๋ฅผ ๋ฌด์ํ๋ค.
let str1 = 'NaN means not a number. Infinity contains -Infinity and +Infinity in JavaScript',
str2 = 'My grandfater is 65 years old and My grandmother is 63 years old.',
str3 = 'The contract was declared null and void.';
str1.match('number'); // 'number' is a string. return ["number"]
str1.match(NaN); // NaN์ ํ์
์ number์ด๋ค. return ["NaN"]
str1.match(Infinity); // Infinity์ ํ์
์ number์ด๋ค. return ["Infinity"]
str1.match(+Infinity); // return ["Infinity"]
str1.match(-Infinity); // return ["-Infinity"]
str2.match(65); // return ["65"]
str2.match(+65); // return ["65"]
str3.match(null); // return ["null"]
์ฐธ๊ณ
์๋ฐ์คํฌ๋ฆฝํธ ์ ๊ทํํ์์ capturing group
Last updated
Was this helpful?