👋 lastIndex
lastIndex
-
정규 표현식 사용 형태
const value = 'ABC'; const obj = new RegExp('A', 'g'); console.log(obj.text(value)); const reg = /A/g; console.log(reg.test(value)); // 1. const obj = new RegExp("A", "g"); RegExp 인스턴스를 생성함 // A로 매치 대상에 매치 함 // g 플래그는 모두 매치 함 // 2. obj.text(value) obj에 설정된 A를 ABC에 매치하며 A가 있으므로 true를 반환 // 3. const reg = /A/g 정규 표현식 리터럴을 사용한 형태 임 // new 연산자를 사용하지 않았을 뿐, 1번과 같음
-
매치 시작 위치를
- lastIndex 프로퍼티에 설정
- 디폴트 값 : 0
-
g 플래그를 사용하면
lastIndex
프로퍼티 위치부터 매치
const value = 'ABABAB', 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 // 1. obj.test(value) B가 ABABAB 있으므로 매치되며 true 반환 // 2. obj.lastIndex lastIndex 값으로 2가 출력 됨 // B가 매치된 인덱스는 1이며 1을 더한 값임 // 2가 다음에 매치를 시작 할 위치 // 3. obj.test(value), lastIndex 값이 2이므로 대상 문자열의 2번 인덱스부터 B를 매치 함 // 4. obj.lastIndex lastIndex 값으로 4가 출력 됨 // B가 매치된 인덱스는 3이며 1을 더한 값 // 5. g 플래그는 매치가 되면 lastIndex 값에 1을 더함 // 6. obj.test(value) 대상 문자열의 4번 인덱스부터 B를 매치하며 매치가 되지 않아 false가 출력 됨 // 7. obj.lastIndex 매치가 되지 않으면 lastIndex 값은 0이 됨
-
g 플래그를 사용하지 않으면
lastIndex
프로퍼티 값이 바뀌지 않음
const value = 'ABABAB', obj = /B/; console.log(obj.test(value) + ': ' + obj.lastIndex); // true: 0 console.log(obj.test(value) + ': ' + obj.lastIndex); // true: 0 // 1. obj = /B/ g플래그를 사용하지 않았음 // 2. obj.test(value) B가 ABABAB에 있으므로 매치되며 true 반환 // 3. obj.lastIndex lastIndex 값이므로 0이 출력 됨, 0은 디폴트 값으로 값이 바뀌지 않음, g 플래그를 작성하지 않으면 값이 바뀌지 않음 // 4. obj.test(value) 매치가 되어 true가 출력됨 // 5. obj.lastIndex lastIndex 값으로 0이 출력됨
- lastIndex 값을 지정해도 적용되지 않고 0 번 인덱스부터 배치
const value = 'ABABAB', obj = /B/g; 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 // 1. true: 0 매치가 되었으므로 1이 출력 되어야 함 // 2. obj.lastIndex = 2 lastIndex에 2를 설정했으므로 // 3. obj.test(value) 2번 인덱스부터 매치를 해야 하지만, 0번 인덱스부터 매치 해야 함 // 4. 2번 인덱스부터 매치하면 B가 없으므로 false가 반환됨