👋 u 플래그, s 플래그


1. u 플래그

  • 정규 표현식의 패턴을 유니코드의 코드 포인트로 변환하여 매치

    const obj = new RegExp('₩u{31}₩u{32}', 'u');
    
    console.log(obj.test('12')); // true
    console.log(obj.unicode); // true
    console.log(/₩u{1f418}/u.test('코끼리이모지')); // true
    
    // 1. new RegExp("₩u{31}₩u{32}", "u" 패턴을 코드 포인트로 변환하고 u flag로 인스턴스를 생성함
    // 2. obj.test("12") 매치가 되므로 true가 출력
    // 3. obj.unicode unicode 프로퍼티 값이 true로 설정됨
    // 4. 이모지도 매치 가능
  • u 플래그를 사용하지 않으면 코드 포인트를 문자로 매치

    const result = /₩u{31}₩u{32}/.test('12');
    
    console.log(result);
    
    // 1. / 다음에 플래그를 작성하지 않았음
    // 2. 패턴의 코드 포인트를 일반 문자로 간주하여 12와 매치하므로 false가 출력됨

2. s 플래그

  • 정규 표현식에서 dot(점.)은 모든 문자를 매치하지만 줄바꿈 문자는 매치 하지 않음
  • S 플래그를 사용하면(ES2018) 줄 바꿈 문자를 매치

    const text = `line
    줄을 바꿈`;
    
    // 이전 방법
    console.log(/[₩s₩S]+/.test(text)); // true
    console.log(/[^]+/.test(text)); // true
    
    // s플래그
    const obj = new RegExp('.+', 's');
    console.log(obj.test(text)); // true
    console.log(obj.dotAll); // true
    • dotAll 플래그에 true 설정
  • 줄 바꿈 문자

    • U+000A Line Feed(LF)(“\n”)
    • U+000D Carriage Return(CR)(“\r”)
    • U+2028 Line Separator
    • U+2029 Paragraph Separator