RegExp Object
- last index
- 정규 표현식 사용 형태
const value="ABC"; const obj = new RegExp("A", "g"); console.log(obj.test(value)); // true const result = /A/g; console.log(reg.test(value)); // true
- /A/g
- 정규 표현식 리터럴 사용 형태로 new 연산자를 사용하지 않을 뿐 new RegExp(“A”, “g”);와 같다.
- /A/g
- 매치 시작 위치를 lastIndex 프로퍼티에 설정, 디폴트 값: 0
- g 플래그를 사용하면 lastIndex 프로퍼티 위치부터 매치
const value="ABABA", obj=/B/g console.log(obj.test(value) + ": " + obj.lastIndex); // true: 2 console.log(obj.test(value) + ": " + obj.lastIndex); // true: 4 console.log(obj.test(value) + ": " + obj.lastIndex); // false: 0
- lastIndex가 1, 3이 아닌 2, 4를 나타내는 겂은 매치된 인덱스 다음부터 확인한다는 뜻이다.
- 다음 매치되는 값이 없으면 0을 return 한다.
- g 플래그를 사용하지 않으면 lastIndex 프로퍼티 값이 바뀌지 않는다.
- lastIndex 값을 지정해도 적용되지 않고 0번 인덱스부터 매치
const value = "ABABA", obj=/B/; console.log(obj.test(value) + ": " + obj.lastIndex); // true: 0 console.log(obj.test(value) + ": " + obj.lastIndex); // true: 0
- g 플래그를 사용하지 않으면 lastIndex는 0을 리턴한다.
- lastIndex가 0이라는 것은 적용되지 않는다는 것을 의미한다.
const value = "ABABA", obj=/B/; console.log(obj.test(value) + ": " + obj.lastIndex); // true: 0 obj.lastIndex=2; console.log(obj.test(value) + ": " + obj.lastIndex); // true: 2 console.log(obj.test(value) + ": " + obj.lastIndex); // true: 2
- obj.lastIndex = 2;
- 강제로 lastIndex를 설정했으므로 2번 인덱스부터 매치를 해야 하지만 0번 인덱스부터 매치
- 2번 인덱스부터 매치하면 마지막 console.log()에 대한 값이 false를 반환해야 하지만 위에 이유로 true를 반환한다.
- lastIndex 값을 지정해도 적용되지 않고 0번 인덱스부터 매치
- 정규 표현식 사용 형태
y flag
- lastIndex 위치에 매치
- lastIndex 부터가 아니라 lastIndex 위치에 매치
- 매치되면 lastIndex 값이 1 증가
const value="AABBA", obj=/A/y; console.log(obj.test(value) + ": " + obj.lastIndex); // true: 1 console.log(obj.test(value) + ": " + obj.lastIndex); // true: 2 console.log(obj.test(value) + ": " + obj.lastIndex); // false: 0
- y flag 도 매치되면 1을 더한다.
- 4번 인덱스에 A가 있지만 2번 인덱스에 매치하며 2번 인덱스 값이 B이므로 매치되지 않는다.
- lastIndex에 존재하는 경우만 true를 넘겨준다.
- lastIndex 값을 지정할 수 있다.
- sticky 프로퍼티에 true 설정
const value = "AABBA", obj=/A/y; console.log(obj.sticky); // true obj.lastIndex = 4; console.log(obj.test(value) + ": " + obj.lastIndex); // true: 5
- obj.sticky
- y flag를 사용하면 sticky 프로퍼티에 true가 설정
- obj.test(value)
- lastIndex를 4로 설정했기 때문에 마지막 A가 매치되어 true 출력, lastIndex는 1을 더한 5가 된다.
- obj.sticky
- sticky 프로퍼티에 true 설정
u flag
- 정규 표현식의 패턴을 유니코드의 코드 포인트로 변환하여 매치
- unicode 프로퍼티에 true 설정
const obj = new RegExp("\u{31}\u{32}", "u"); console.log(obj.test("12")); // true console.log(obj.unicode); // true
- unicode 프로퍼티에 true 설정
- u flag를 사용하지 않으면 코드 포인트를 문자로 매치
const obj = /u{31}\u{32}/; console.log(obj.test("12")); // false
s flag
- 정규 표현식에서 dot(점, .)은 모든 문자를 매치하지만 줄 바꿈 문자는 매치하지 않는다.
- s flag를 사용하면 줄 바꿈 문자를 매치 (ES2018)
- dotAll 플래그에 true 설정
const text = `line 줄을 바꿈`; // 이전 방법 console.log(/[\s\S]+/.test(text)); // true console.log(/[^]+/.test(text)); // true // ES2018 이후 방법 - s flag const obj = new RegExp(".+", "s"); console.log(obj.test(text)); // true console.log(obj.dotAll); // true
- s flag를 사용하면 줄 바꿈 문자를 매치할 수 있다.
- dotAll 플래그에 true 설정
- 줄 바꿈 문자
** 출처1. 인프런 강좌_자바스크립트 ES6+