inflearn logo
강의

Course

Instructor

Modern JavaScript (ES6+) Basics

3. u flag, s flag

RegExp 인스턴스 생성시에는 u플래그를 사용안해도 적용이 되나요?

356

catsbi

16 asked

0

안녕하세요 강사님! 

u플래그에 대한 강의를 듣다고 예제코드를 해보는 와중에 u플래그를 사용하지 않으면 코드 포인트를 문자로 해석한다고해서 실행을 해보니 정상적으로 false를 반환을 합니다.

다만, 생성자 방식으로 const obj =  new RegExp("\u{31}\u{32}") RegExp인스턴스를 생성하여 

obj.test("12")를 진행하니 true가 반환됩니다.  생성자를 통한 정규표현식 검사에서는 u플래그가 없어도 코드 포인트를 문자로 매치하는게 아닌 유니코드의 코드 포인트로 변환후 매치하는게 맞나요? 

javascript es6

Answer 2

0

tonextday

유니코드 31은 1이고 유니코드 32는 2입니다. 플래그 u를 작성하면 유니코드 값을 변환합니다.
한편, 플래그를 작성하지 않으면 변환하지 않는것으로 보아집니다.

console.log("1.", /\u{31}\u{32}/u.test("12")); 유니코드로 변환하므로 12가 되어 true가 됩니다.

console.log("2.", /\u{31}\u{32}/.test("12"));  유니코드로 변환하지 않으므로 false됩니다.

const obj1 = new RegExp("\u{31}\u{32}", "u"); console.log("3.", obj1.test("12"));
const obj2 = new RegExp("\u{31}\u{32}"); console.log("4.", obj2.test("12"));

new RegExp()로 인스턴스를 생성할 때, 두 번째 파라미터에 u 플래그 작성 여부에 관계없이 첫 번째 파라미터의 패턴 형태를 분석하여, u가 작성되어 있으면 유니코드로 변환하는 것으로 보아집니다.

자바스크립트의 String 오브젝트에서 패턴(//)을 인식하면, String 오브젝트에 RegExp가 없으므로 RegExp 오브젝트로 값을 넘겨주어 처리한 후, 반환된 값을 String 오브젝트에 처리하게 됩니다만, 넘겨 줄 때 new RegExp()처럼 패턴을 체크하여 u 플래그를 넘겨 주면 좋을 텐데, 아직 이 부분까지 String 오브젝트에 반영되지 않은 것으로 생각됩니다.

한편, String 오브젝트에서 u 프래그를 임의로 넘겨 주지 않는 것이 정상일 수 있으며, RegExp 오브젝트에서 String 오브젝트에서 넘겨 주는 값을 new RepExp() 처럼 패턴을 체크하여 u 플래그를 적용하는 것도 방법일 수 있습니다.

하지만, 자바스크립트 정규 표현식은 표준이며, 오해가 발생할 것 같아 적을 수는 없지만 자바스크립트 정규 표현식을 그대로 사용하는 언어도 있습니다. 이런 어려움으로 인해 현재 방법을 취한 것으로 생각됩니다. 

또한 "ABC".includes("A");를 실행하면 "ABC"가 String 타입이므로 String 인스턴스를 생성하여 includes() 메소드를 실해하는 것처럼, /\u{31}\u{32}/.test("12"))처럼 패턴이면 RegExp 인스턴스를 만들어 처리하게 되므로 이때 패턴을 분석하여 u가 작성되어 있으면 유니코드로 처러하면 편리할 것 같습니다만, u 플래그 작성만 체크한 것으로 보아 집니다.

0

catsbi

약간 자문자답인데, 생성자안에 코드포인트를 넣을때 파라미터가 넘어가며 변환이 되기때문인 것 같은데 , 파라미터를 넘기는 시점에서 String.raw `\u{31}\u{32}` 이런식으로 보내면 되지 않을까 싶습니다. 맞게 생각한걸까요?

prototype의 메소드 내부에 화살표 함수가 작성된 경우

1

229

0

let 변수 호이스팅

0

381

1

[정리시간]부족하지만...

3

238

0

[제네레이터함수, yield를 활용한 무한 덧셈] 식, result += yield result를 어떻게 이해 해야할까요???

0

408

1

자바스크립트도 컴파일을 하나요?

0

626

1

틀린부분 질문드립니다

0

304

1

clear() 메소드 관련 질문

0

250

0

실행 시점

0

162

0

yield에 대해 질문이 있습니다.

0

302

2

window 오브젝트에서의 함수표현식 호출

0

279

1

Unicode 관련 정리

2

226

1

화살표 함수의 this 의 정적 스코프 참조 부분 질문드립니다.

0

205

1

선생님께서 ES5 심화과정에서 알려주신 event 처리 방법 나이스입니다!

1

214

1

안녕하세요.선생님 질문이 생겨서 글남깁니다.

0

201

1

안녕하세요.선생님 질문 있습니다.

1

262

2

Array.from()이랑 Array.of()랑 설명이 뒤바뀐 것 같아요..

0

177

1

Arrow Function 에서 Scope 관련 질문이 있습니다.

1

298

5

setPrototypeOf() 는 정의에 대해 헷갈린 점 질문 드립니다.

5

234

1

[강의자입니다] 브라우저 디버거 창의 오른쪽에 let, const 변수 표시

5

289

0

디버깅 맨 처음부터 Script에 globalLet이 설정되어있습니다.

1

243

1

강의 pdf 파일 공개 부탁드립니다

0

170

1

아 전역에 let을 선언해도 순서대로 읽는군요;;

2

240

1

Symbol.species 질문입니다.

0

420

1

글의 정리가 안되어있어 삭제했습니다.

0

163

1