일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어
자바스크립트의 고유 문법이 아니며, 대부분의 프로그래밍 언어와 코드 에디터에 내장돼 있음
: 정규 표현식 리터럴과 RegExp 생성자 함수를 사용해 생성할 수 있음
/RegExp/i
/ 👉 시작과 종료
RegExp 👉 패턴
i 👉 플래그
예를들어
const example = 'is this all there is?';
const regexp = /is/i; // 패턴: is, 플래그: i(대소문자 구문 x)
regexp.test(example); // true
const reg = new RegExp(/is/i);
reg.test(example); // true
: 정규 표현식의 검색 방식을 설정하기 위해 사용
순서와 상관없이 하나 이상의 플래그를 동시에 설정할 수 있음
Flag | Description |
---|---|
g | 전역 검색 |
i | 대소문자 구분 없는 검색 |
m | 다중행(multi-line) 검색 |
s | .에 개행 문자도 매칭(ES2018) |
u | 유니코드; 패턴을 유니코드 코드 포인트의 나열로 취급합니다. |
y | "sticky" 검색을 수행. 문자열의 현재 위치부터 검색을 수행합니다. sticky (en-US) 문서를 확인하세요. |
출처: mdn
자주 사용하는 플래그
i (ignore case) : 대소문자를 구분하지 않고 패턴을 검색
g (global) : 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색
m (multi line): 문자열의 행이 바뀌더라도 계속 패턴을 검색
자주 사용하는 메서드
:exec() 메서드는 주어진 문자열에서 일치 탐색을 수행한 결과를 배열로 반환
매칭 결과가 없으면 null을 반환
예) 출처: js deep dive
const example = "is this all there is?";
const regexp = /is/;
console.log(regexp.exec(example));
// [ 'is', index: 0, input: 'is this all there is?', groups: undefined ]
단, exec 메서드는 문자열 내의 모든 패턴을 검색하는 g 플래그를 지정해도 첫번째 매칭 결과만 반환
예) 출처: mdn
const regex1 = RegExp('foo*', 'g');
const str1 = 'table football, foosball';
let array1;
while ((array1 = regex1.exec(str1)) !== null) {
console.log(`Found ${array1[0]}. Next starts at ${regex1.lastIndex}.`);
// "Found foo. Next starts at 9."
// "Found foo. Next starts at 19."
}
:test() 메서드는 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환
예) 출처: js deep dive
const example = "is this all there is?";
const regexp = /is/;
console.log(regexp.test(example)); //true
예) 출처: mdn
const str = "table football";
const regex = new RegExp("foo*");
const globalRegex = new RegExp("foo*", "g");
console.log(regex.test(str)); // true
console.log(globalRegex.lastIndex); // 0
console.log(globalRegex.test(str)); // true
console.log(globalRegex.lastIndex); // 9
console.log(globalRegex.test(str)); // false
: 정규 표현식에 전역 플래그를 설정한 경우, test() 메서드는 정규 표현식의 lastIndex (en-US)를 업데이트합니다.
(RegExp.prototype.exec()도 lastIndex 속성을 업데이트합니다.)
test(str)을 또 호출하면 str 검색을 lastIndex부터 계속 진행합니다. lastIndex 속성은 매 번 test()가 true를 반환할 때마다 증가하게 됩니다.
👉 이 성질 때문에
console.log(globalRegex.lastIndex); // 9
console.log(globalRegex.test(str)); // false
이렇게 반환된 것!
참고: test()가 true를 반환하기만 하면 lastIndex는 초기화되지 않습니다. 심지어 이전과 다른 문자열을 매개변수로 제공해도 그렇습니다!
test()가 false를 반환할 땐 lastIndex 속성이 0으로 초기화됩니다.
: match() 메서드는 문자열이 정규식과 매치되는 부분을 검색
예) 출처: js deep dive
const example = "is this all there is?";
const regexp = /is/;
console.log(example.match(regexp));
// [ 'is', index: 0, input: 'is this all there is?', groups: undefined ]
const example = "is this all there is?";
const regexp = /is/g;
console.log(example.match(regexp));
// [ 'is', 'is', 'is' ]