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 프로퍼티에 설정
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
const value = "AABBA", obj = /A/y;
log(obj.sticky);
obj.lastIndex = 4;
log(obj.test(value) + ": " + obj.lastIndex);
// true
// true: 5
u 플래그, s 플래그
u 플래그
정규 표현식의 패턴을 유니코드의 코드 포인트로 변환하여 매치
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