// `n`이 두 개 포함된 문자열
const str = 'one two three four five six seven eight nine ten';
// `g` 플래그 없이는 최초에 발견된 문자 한번만 반환
const isMatch = str.match(/n/);
console.log(isMatch);
/*
[
'n',
index: 1,
input: 'one two three four five six seven eight nine ten',
groups: undefined
]
*/
// `g` 플래그가 있으면 모든 결과가 배열로 반환
const isFlag = str.match(/n/g);
console.log(isFlag); // [ 'n', 'n', 'n', 'n', 'n' ]
// 여러 줄의 문자열에서 필터링 해야 될때 사용
// 줄바꿈이 포함된 3줄 문자열
const str2 = 'one two three~~\nfour five six??\nfour seven eight nine ten!!';
console.log(str2);
/*
one two three~~
four five six??
four seven eight nine ten!!
*/
// one 단어로 시작하는지 검사 (^ 문자는 문장 시작점을 의미)
const isM = str2.match(/^one/);
// → 첫번째 줄은 잘 찾음
console.log(isM); // ["one"]
// Power 단어로 시작하는지 검사
const isM2 = str2.match(/^four/);
// → 그러나 그 다음 줄은 검색되지 않음
console.log(isM2); // null
// 따라서 m 플래그를 통해 개행되는 다음 줄도 검색되게 설정
const isM3 = str2.match(/^four/m);
console.log(isM3); // ['four']
// 세번째 줄도 검색되게 하고싶으면 g 플래그와 혼합 사용
const isM4 = str2.match(/^four/gm);
console.log(isM4); // [ 'four', 'four' ]
// 정규식은 기본적으로 대소문자를 구분
// 대신 i 플래그를 통해 대소문자 구분 하지 않을 수 있음
const str3 = 'abcABCabcABCdefgDEFGdefgDEFG';
// 대소문자 a 검색
const isI = str3.match(/g/gi);
console.log(isI); // [ 'g', 'G', 'g', 'G' ]
// 정규표현식을 담은 변수
const regex = /seven/; // seven 이라는 단어가 있는지 필터링
const txt = 'one two three four five six seven eight nine ten';
// "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
const isMatch = regex.test(txt);
console.log(isMatch); // true
// "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환
const isMatch2 = txt.match(regex);
console.log(isMatch2); // ['seven']
// "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환
const isMatch3 = txt.split(regex);
console.log(isMatch3); // [ 'one two three four five six ', ' eight nine ten' ]
// "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
const isMatch4 = txt.replace(regex, 'heaven');
console.log(isMatch4); // 'one two three four five six heaven eight nine ten'
// match 메서드와 유사 (단, 무조건 첫번째 매칭 결과만 반환)
const isMatch5 = regex.exec(txt);
console.log(isMatch5); // ['seven']
1. https://regex101.com/
2. https://regexr.com/