January 19, 2020
정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴입니다. 자바스크립트에서 정규 표현식 또한 객체입니다.
const birth = '9410o7';
const myRegExp = /^[0-9]+$/;
console.log(myRegExp.test(birth)); // false문자열에 숫자만 있는지 확인해주는 간단한 예제입니다.
const re = /ab+c/;정규식 리터럴은 스크립트가 불러와질 때 컴파일됩니다. 만약 정규식이 상수라면, 이렇게 사용하는 것이 성능을 향상시킬 수 있습니다.
const re = new RegExp("ab+c");생성자 함수를 사용하면 정규식이 실행 시점에 컴파일됩니다. 정규식의 패턴이 변경될 수 있는 경우, 혹은 사용자 입력과 같이 다른 출처로부터 패턴을 가져와야 하는 경우에는 생성자 함수를 사용하세요.
정규식 패턴은 /abc/와 같이 단순 문자, /Chapter (\d+)\.\d*/와 같이 단순 문자와 특수 문자의 조합으로 구성될 수 있습니다.
const regExp = /abc/;
console.log(regExp.test("The latest airplane designs evolved from slabcraft."); // true
console.log(regExp.test("Grab crab")) // false첫번째 문자열은 "abc"에 대응합니다. 하지만 두번째 문자열은 "ab c"를 포함하지만 "abc"를 정확하게 포함하지 않기 때문에 대응되지 않습니다.
특수 문자가 아닌 문자 앞에서 사용된 백슬래시는 ‘해당 문자는 특별하고, 문자 그대로 해석되면 안된다’는 의미.
/b/ // 문자 b
/\b/ // 문자 b가 아닌 단어 경계에 대응하는 특수문자특수 문자 앞에 위치한 백슬래시는 ‘다음에 나오는 문자는 특별하지 않고 문자 그대로 해석되어야 한다’
/a*/ // 0개 이상의 a문자가 등장함
/a\*/ // 문자 *RegExp(“patter”)표기를 사용하면 \자체를 이스케이프 해줘야 함
const re2 = new RegExp('a\\*')
// 백슬래시 자체를 이스케이프 함입력의 시작부분에 대응됩니다.(multi line 플래그가 true면 줄바꿈문자 바로 다음부분과도 대응됨)
const re = /^A/;
console.log(re.test("an A")); //false
console.log(re.test("An E")); //true[^abc]는 [^a-c]와 동일합니다.[a-d]는 “brisket”의 ‘b’에 일치하고 “city”의 ‘c’에 일치합니다.입력의 끝 부분과 대응됩니다.(multi line 플래그가 true면 줄바꿈문자 바로 앞 부분과도 대응됨)
const re = /t$/;
console.log(re.test("eater")); //false
console.log(re.test("eat")); //true앞의 표현식이 0회 이상 연속으로 반복되는 부분과 대응됩니다.
const re = /bo*/;
console.log(re.test("A ghost booooed"));// true ('booo'와 대응됨)
console.log(re.test("A bird warbled")); // true ('b'에 대응됨)
console.log(re.test("A goat grunted")); //false (대응되는곳이 없음)앞의 표현식이 1회 이상 연속으로 반복되는 부분과 대응됩니다.
const re = /a+/;
console.log(re.test("candy")); //true ('a'에 대응됨)
console.log(re.test("caaandy")); //true (모든 'a'들에 대응됨)
console.log(re.test("A goat grunted")); //false (대응되는곳 없음)?.플래그는 옵션이므로 선택적으로 사용합니다. 플래그를 사용하지 않은 경우 첫번째 매칭한 대상만을 검색하고 종료합니다.
| Flag | Meaning | Description |
|---|---|---|
| I | Ignore Case | 대소문자를 구별하지 않고 검색 |
| g | Global | 문자열 내의 모든 패턴 검색 |
| m | Multi Line | 문자열의 행이 바뀌더라도 계속 검색 |
const str = "11시 20분 32초";
const regExp = /\d+/g;
regExp.exec(str); // [ '11' ]
str.match(regExp); // [ '11', '20', '32' ]const str = "11시 20분 32초";
const regExp = /\d+(초)/g;
str.match(regExp); // [ '32초' ]
regExp.exec(str); // [ '32초', '초' ]exec()는 글로벅 플래그를 넣어놔도 일치하는 첫번째 값만 반환합니다. 하지만 캡쳐값이 있을 경우 배열로 반환합니다.