정규 표현식의 기본 패턴
정규 표현식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
먼저 정규 표현식은 대소문자를 구분한다. (구분하지 않게 하고 싶다면 정규 표현식의 내용이나 설정을 바꿔야 한다.)
또 띄어쓰기, 탭, 개행 등의 영향을 받는다.
✏️ 예시)
정규 표현식의 위치와 이스케이핑
^ (캐럿)은 라인의 앞쪽에 있는 요소를 선택할 때 쓰인다.
$ (달러)는 라인의 뒤쪽에 있는 요소를 선택할 때 쓰인다.
아래 예시처럼 같은 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와 동일한 문자들이 선택될 수 있다.
'👋🏻 JavaScript > 📖 자바스크립트 ES6+' 카테고리의 다른 글
[JavaScript] map() 이란? (0) | 2023.04.25 |
---|---|
[JavaScript] splice와 slice 비교하기 (0) | 2023.04.19 |
[JavaScript] 정규 표현식 공부하기 3 (0) | 2023.03.26 |
[JavaScript] 정규 표현식 공부하기 2 (0) | 2023.03.26 |
[JavaScript] 자바스크립트로 입력 받기 (0) | 2023.03.25 |