Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 정규 표현식 공부하기 1 본문

👋🏻 JavaScript/📖 자바스크립트 ES6+

[JavaScript] 정규 표현식 공부하기 1

썸머몽 2023. 3. 26. 00:54
728x90

정규 표현식의 기본 패턴

 

정규 표현식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.

 

먼저 정규 표현식은 대소문자를 구분한다. (구분하지 않게 하고 싶다면 정규 표현식의 내용이나 설정을 바꿔야 한다.)

또 띄어쓰기, 탭, 개행 등의 영향을 받는다.

 

✏️ 예시)

 

정규 표현식의 위치와 이스케이핑

 

^ (캐럿)은 라인의 앞쪽에 있는 요소를 선택할 때 쓰인다.

$ (달러)는 라인의 뒤쪽에 있는 요소를 선택할 때 쓰인다.

 

아래 예시처럼 같은 who여도 ^이냐 $이냐에 따라서 선택되는 부분이 다르다.

 

✏️ 예시)

 

만약 이런 ^, $가 소스에 포함되어 있다면 어떻게 해야 할까?

Case 1의 정규 표현식은 라인 가장 앞 쪽에 있는 $를 표현하려고 했다.

하지만 뒤에 있는 $가 정규표현식의 $이기 때문에 작동되지 않았다.

이럴 때는 Case 2처럼 '\'를 걸어주면 된다. \는 뒤에 오는 문자를 정규 표현식의 문자가 아닌 단순 문자로 바꿔준다.

즉 \$ 을 하면 그냥 문자 '$'라는 뜻이 된다. \^도 그냥 문자 '^'가 되는 것이다.

 

✏️ 예시)

 

^, $를 쓰는 방법은 알았다.

그럼 원래 Case 1이 의도했던대로 소스의 앞쪽에 있는 것만 나타내고 싶으면 어떻게 해야 할까?

 

✏️ 예시)

 

위 예시처럼 \ 앞뒤로 ^와 $를 사용하면 된다.

^\$에서 $는 이미 문자가 되었고, \$$에서도 문자가 된 후 $를 만난 것이기 때문에 각각 가장 앞/뒤를 나타낼 수 있는 것이다.

 

이렇게 백슬래시 뒤에 있는 문자를 특정 역할로부터 탈출시켜주기 때문에 Escape라고 한다.

 

✏️ 예시)

 

백슬래시의 백슬래시 또한 이스케이프 할 수 있다.

 

모든 문자

 

'.'은 모든 문자(any character)를 매치한다.

 

✏️ 예시)

 

점이 한 개 찍혀 있는 Case 1

First match 에서는 점 하나로 문자 하나를 표현한다.

All matches에서는 모든 문자가 하나로 표현된다.

 

점이 6개 찍혀 있는 Case 2

First match 에서는 점 하나 = 문자 하나기때문에 6글자로 Regula 까지 표현된다.

All matches에서는 ul!!! 빼고 모두가 표현되었는데, 이는 점 하나 = 문자 하나기 때문에 점 6개가 한 뭉텅이로 선택된다.

따라서 Regula/r expr/ession/s are /powerf 외에 ul!!! 는 문자가 5개이기때문에 선택되지 않은 것이다.

 

만약에 O.K. 라는 소스가 있을 때는 어떻게 될까?

이 역시 이스케이프와 '.'을 활용해서 선택할 수 있다.

 

✏️ 예시)

 

Case 1 [.]

First match: 문자 하나만 선택되므로 [O].K.

All matches: 모든 문자가 선택되므로 [O.K.]

 

Case 2 [\.] - 이스케이프 되어 백슬래시 뒤의 온점은 문자 온점으로 기능한다.

First match: O[.]K.

All matches: 모든 온점이 선택되므로 O[.]K[.]

 

Case 3 [\..\.] - 백슬래시 뒤의 온점은 문자 온점이므로 .'아무문자나됨'. 형태를 선택한다.

점과 점 사이에 있는 아무 문자나 선택한다는 말이다.

First match: O[.K.]

All matches: O[.K.]

 

특정 문자

 

대괄호 [] 안에 있는 문자들중 하나를 선택한다.

 

✏️ 예시) 

 

[oyu] 는 'o' or 'y' or 'u' 중 한 글자를 선택한다.

First match: 셋 중 가장 처음에 있는 'o'를 선택한다.

All matches: 'o' 'y' 'u' 가 해당되면 모두 선택한다.

 

[] 는 문자를 하나로 생각한다.

 

✏️ 예시) 

 

Case 2의 [dH]는 'd'나 'H' 를 말한다.

이 뒤에 '.'이 붙어 있다는 것은 'd' 뒤에 아무 문자나 붙어 있을 경우 / 'H' 뒤에 아무 문자나 붙어 있을 경우가 된다.

First match: 'Ho'

All matches: 'Ho' 'do' 'do' 

 

Case 3도 동일하게 [owy][yow]가 있으면 [o 또는 w또는 y][y 또는 o 또는 w]가 나란히 있는 2글자를 말한다.

First match: 'ow'

All matches: 'ow' 'yo'

 

그런데 []는 안에 특정 문자를 여러 개 넣는 것은 조금 귀찮을 수 있다.

그래서 [] 안에 '-' (어레인지)를 넣으면 해당 범위만큼 선택할 수가 있다.

 

✏️ 예시) 

[C-K]와 [CDEFGHIJK]는 같은 문자를 선택한다.

 

✏️ 예시) 

 

소문자도, 숫자도, 대소문자와 숫자를 모두 섞어서도 사용할 수 있다.

Case 5처럼 섞을 경우에는 다시 표현을 해주어야 하며, First match의 경우에는 가장 처음인 C만 선택된다.

 

[] 안에는 ^도 들어갈 수 있다. 그러나 이 때에는 초반에 배웠던 ^의 기능 (앞부터 선택)이 아니라 다른 기능으로 쓰여진다.

[] 안에서는 not의 의미로 ^뒤의 문자는 선택되지 않게 된다.

 

✏️ 예시) 

 

Case 1을 보면 [^CDghi45] 인데, ^ 뒤의 문자중 한 글자라도 해당되면 선택되지 않는다.

First match: 'A' 

All matches: CD ghi 45를 제외한 모든 문자가 선택되었다.

 

Case 2도 마찬가지로 [^W-Z]이면 W 또는 X 또는 Y 또는 Z 면 선택되지 않는 것이다.

 

서브 패턴

 

서브 패턴을 쓸 때는 예시와 같이 소괄호 ()와 파이프 기호 |를 사용한다.

 

✏️ 예시) 

 

Case 2(1임)를 보면 (on|ues|rida)라고 되어 있는데, on 또는 ues 또는 rida 를 선택한다는 뜻이다.

 

✏️ 예시) 

 

진짜 Case 2를 보면 (Monday|Tuesday|Friday)로 쓸 수 있지만, day라는 공통 부분을 뒤로 빼주어 표현했다.

이런 식으로 소괄호 밖이랑도 붙여서 쓸 수 있다.

 

Case 3에서도 ..iday/..esday/..nday 로 해석되어 소괄호 안과 오른쪽에 있는 문자들을 더했을 때 앞에 점이 2개 있다.

점의 갯수만큼, 즉 문자 2개를 앞에 붙일 수 있으므로 Case 2와 동일한 문자들이 선택될 수 있다. 

 


 

 

정규표현식 - 생활코딩

정규표현식(regular expression)은 문자열에서 특정한 문자를 찾아내는 도구다. 이 도구를 이용하면 수십줄이 필요한 작업을 한줄로 끝낼 수 있다.  정규표현식은 하나의 언어라고 할 수 있다. 그러

opentutorials.org

728x90