lastIndex
- 정규 표현식 사용 형태
const value = "ABC";
const obj = new RegExp("A", "g");
log(obj.test(value));
const reg = /A/g;
log(reg.test(value));
// true
// true
- 매치 시작 위치를 lastIndex 프로퍼티에 설정
- 디폴트 값: 0
- g 플래그를 사용하면
- lastIndex 프로퍼티 위치부터 매치
- const value = "ABABA", obj = /B/g
const value = "ABABA", obj = /B/g;
log(obj.test(value) + ": " + obj.lastIndex);
log(obj.test(value) + ": " + obj.lastIndex);
log(obj.test(value) + ": " + obj.lastIndex);
// true: 2
// true: 4
// false: 0
- g 플래그를 사용하지 않으면 lastIndex 프로퍼티 값이 바뀌지 않음
- lastIndex 값을 지정해도 적용되지 않고 0번 인덱스부터 배치
const value = "ABABA", obj = /B/;
log(obj.test(value) + ": " + obj.lastIndex);
log(obj.test(value) + ": " + obj.lastIndex);
// true: 0
// true: 0
const value = "ABACC", obj = /B/;
log(obj.test(value) + ": " + obj.lastIndex);
obj.lastIndex = 2;
log(obj.test(value) + ": " + obj.lastIndex);
log(obj.test(value) + ": " + obj.lastIndex);
// true: 0
// true: 2
// true: 2
y 플래그
- lastIndex 위치에 매치
- lastIndex부터가 아니라 lastIndex 위치에 매치
- 매치되면 lastIndex 값이 1 증가
- const value = "AABBA", obj = /A/y
const value = "AABBA", obj = /A/y;
log(obj.test(value) + ": " + obj.lastIndex);
log(obj.test(value) + ": " + obj.lastIndex);
log(obj.test(value) + ": " + obj.lastIndex);
// true: 1
// true: 2
// false: 0
- lastIndex 값을 지정할 수 있음
- sticky 프로퍼티에 true 설정
const value = "AABBA", obj = /A/y;
log(obj.sticky);
obj.lastIndex = 4;
log(obj.test(value) + ": " + obj.lastIndex);
// true
// true: 5
u 플래그, s 플래그
u 플래그
- 정규 표현식의 패턴을 유니코드의 코드 포인트로 변환하여 매치
- unicode 프로퍼티에 true 설정
const obj = new RegExp("\u{31}\u{32}", "u");
log(obj.test("12"));
log(obj.unicode);
log(\u{1f418}\u.test("🐘"));
// true
// true
// true
- u 플래그를 사용하지 않으면 코드 포인트를 문자로 매치
const result = /\u{31}\u{32}/.test("12");
log(result);
// false
s 플래그
- 정규 표현식에서 dot(점.)은 모든 문자를 매치하지만 줄 바꿈 문자는 매치하지 않음
- s플래그를 사용하면 (ES2018)
- 줄 바꿈 문자를 매치
- dotAll 플래그에 true 설정
const text = `line 줄을 바꿈`;
// 이전 방법
log(/[\s\S]+/.test(text));
log(/[^]+/.test(text));
// s 플래그
const obj = new RegExp(".+", "s");
log(obj.test(text));
log(obj.dotAll);
// true
// true
// true
// true
- 줄 바꿈 문자
- U+000A Line Feed(LF)("\n")
- U+000D Carriage Return(CR)("\r")
- U+2028 Line Separator
- U+2029 Paragraph Separator
'Javascript > [인프런] 자바스크립트 ES6+ 기본' 카테고리의 다른 글
[자바스크립트 ES6+ 기본] 18. Symbol 오브젝트 (0) | 2022.02.17 |
---|---|
[자바스크립트 ES6+ 기본] 17. Generator 오브젝트 (0) | 2022.02.17 |
[자바스크립트 ES6+ 기본] 15. Math 오브젝트 (0) | 2022.02.17 |
[자바스크립트 ES6+ 기본] 14. Array 오브젝트 (0) | 2022.02.01 |
[자바스크립트 ES6+ 기본] 13. Template Literal (0) | 2022.02.01 |