Skip to main content

Using Repetition in Regular Expressions

Using Repetition in Reguar Expressions

Indicating Character Repetition

1) +

Matches one or more occurences. 하나 또는 그 이상의 패턴 일치

2) ?

Matches zero or one occurrences. 일치하는 패턴이 없거나 하나의 패턴 일치

3) *

Matches zero or more occurrences. 일치하는 패턴이 없거나 하나 이상의 패턴 일치


Infinite Error

/s[a-z]+/g;

‘일치하는 패턴이 없거나 일치하는 경우’는 무한 반복적인 패턴 일치 연산을 일으킨다. 자바스크립트에선 에러 처리를 하지 않아 버그를 알아채기 어렵다.


Greediness and Laziness in Regular Expression

기본적으로 정규표현식은 할 수 있는 한 최대한 일치 패턴을 찾으려고 하기 때문에 ‘Greedy’하다고 한다.

1) Greediness of Regular Expression

아래 상황에서 <p>.*<\/p><p>.*<\/p>는 똑같이 동작한다. 최대한 많이 일치시키려고한다.

2) Laziness of Regular Expression

/<p>.*?<\/p>/ 하나의 태그 요소를 선택한다. 중간에 와일드카드가 있더라도 닫는 p 태그가 있으면 일치 연산을 멈춘다.


Specifying Repitition Amount

1) {min, max}

Matches min to max occurrences.

2) {min}

Matches min occurrences.

3) {min, }

Matches min or more occurrences.

Examples

3개 이상 5개 이하의 문자셋 일치 연산

/\w{3,5}/g;

문자 1개 + 문자셋 3개 이상 5개 이하

/\w\w{3,5}/g;

문자셋 3개

/\w{3}/g;

문자 연속 3개와 하이픈으로 이루어진 패턴

/\w{3}-/g;

문자 3개 혹은 그 이상

/\w{3,}/g;

16진법 코드 찾는 패턴

/#[0-9A-F]{6}/g;

사회보장번호(SSN) 찾는 패턴

/\d{3}-\d{2}-\d{4}/g;

Revisiting Greedy and Lazy Concepts

Understanding that by default they're greedy, but we can force them to be lazy as if it.

What are the two functions of the ? in regular expressions?

A repetition character for matching 0 or 1 occurrence and it forces the left expression to be lazy.

const phone = document.getElementById("phone");
const regPhone = /^(\+\w{1,2})?[\s-.]?\(?\d{3}\)?[\s-.]?\d{3}?[\s-.]?\d{4}$/;

phone.addEventListener("keyup", (e) => {
console.log(e.target.value);
console.log(regPhone.test(e.target.value));
if (!!regPhone.exec(e.target.value)) {
phone.classList.remove("red");
phone.classList.add("green");
} else {
phone.classList.add("red");
phone.classList.remove("green");
}
});