[자바스크립트 ES6+ 기본] 16. RegExp 오브젝트

Speedwell🍀·2022년 2월 3일
0

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

0개의 댓글