문법
metacharacters
대부분의 문법에서 regex는 14개의 metacharacters를 가지고 있다. {}[]()^$.|*+?\로, 이 문자들을 특별한 의미를 가진다. 개별 문자로 사용하려면 \를 앞에 붙여 escape해주어야 한다.
delimiter(구획 문자)
프로그래밍 언어에서는 문자열로 regex를 나타낼 수 있다. "re"처럼. /re/처럼 슬래시도 많이 쓴다. 이 구획 문자는 정규표현식에서 사용하려면 escape해주어야 한다.
기본 개념
or
세로줄은 or을 의미한다. 예를 들어 gray|grey는 "gray"또는 "grey"와 매치된다.
그룹화
괄호는 연산자의 범위 및 우선 순위를 결정하는데 사용된다. 예를 들어 gray|grey와 gr(a|e)y는 같은 패턴이다.
수량화(Quantification)
횟수 표시 문자(quantifier) | 설명 |
* | 이전 요소 0번 이상 반복 |
+ | 이전 요소 1번 이상 반복 |
? | 이전 요소 0또는 1회 |
{n} | 이전 요소 정확히 n회 반복. [2]{2} 라면 2가 2번 반복되는 문자를 뜻한다. |
{min,} | 이전 요소 min이상 반복 |
{,max} | 이전 요소 max이하 반복 |
{min, max} | 이전 요소 min이상 max이하 반복 [a]{2,4} 라면 aa, aaa, aaaa가 포함된다. |
*, +, {}뒤에 붙은 ? | 게으른 수량자로 동작한다. 보통 패턴을 만족하는 최대길이의 문자열을 찾지만, 게으른 수량자로 반복하면 패턴을 만족하는 최소길이의 문자열을 찾는다. |
POSIX 표준
metacharacter | 설명 |
^ | 시작 위치에 있는 문자열을 매치한다. |
. | 모든 싱글 문자를 매치한다(많은 앱이 newline을 제외하지만 포함하는 앱도 있다). bracket expression에서는 실제 .를 의미한다. |
[] | bracket expression. 괄호 안에 있는 하나의 캐릭터를 매치한다. -는 처음이나 마지막에 나오면 문자 그대로를 의미한다([abc-] 또는 [-abc]). ]는 처음 나오면 문자 그래도를 의미한다([]abc]). |
[^] | 괄호 안에 있는 문자가 아닌 하나의 캐릭터를 매치한다. |
$ | 문자열 또는 line의 마지막 위치를 매치한다. |
() | 하위 표현을 정의한다. |
\n | |
* | 이전 요소 0번 이상 반복을 매치 |
{m,n} | 이전 요소 m이상 n이하 반복 매치 |
POSIX 확장
metacharacter | 설명 |
? | 이전 요소 0또는 1회 매치 |
+ | 이전 요소 1번 이상 반복 매치 |
| | or |
Character classes (캐릭터 클래스)
Java | ASCII | 설명 |
\w | [A-Za-z0-9_] | 알파벳과 숫자와 _ |
\W | [^A-Za-z0-9_] | 알파벳과 숫자와 _ 가 아닌것 |
\d | [0-9] | 숫자 |
\D | [^0-9] | 숫자가 아닌것 |
\s | [ \t\r\n\v\f] | whitespace 문자들 |
\S | [^ \t\r\n\v\f] | whitespace 문자가 아닌것 |
\b | (?<=\W)(?=\w)|(?<=\w)(?=\W) | \w와 \W사이. 즉 문자와 문자가 아닌 것의 경계. 클래스로 사용하면 포함되지 않지만 ASCII로 사용하면 문자가 포함된다. |
\B | (?<=\W)(?=\W)|(?<=\w)(?=\w) | \w와 \w사이 또는 \W와 \W사이. 즉 단어 경계가 아닌 경계. 클래스로 사용하면 포함되지 않지만 ASCII로 사용하면 문자가 포함된다. |
정규가 아닌 언어(non-refular languages) 패턴
요즘 regex라이브러리는 regular languages를 넘는 힘을 나타낸다.
어떠한 것으로 시작하거나 어떠한 것으로 끝난다는 것을 지정할 때에는 다음의 패턴을 사용한다.
pattern | type | matches |
(?<=Y)X | Positive lookbehind | Y 뒤에 있는 X |
(?<!Y)X | Negative lookbehind | Y 뒤에 있지 않은 X |
X(?=Y) | Positive lookahead | Y 앞에 있는 X |
X(?!Y) | Negative lookahead | Y 앞에 있지 않는 X |
예를 들어 "today is cloudy"중 " is "를 알고 싶다면 (?<=today)[\s\S]+(?=cloudy)를 사용하면 된다.
참고 : https://javascript.info/regexp-lookahead-lookbehind
https://en.wikipedia.org/wiki/Regular_expression
https://blog.outsider.ne.kr/141
https://blog.hexabrain.net/202
'web > javascript' 카테고리의 다른 글
youtube html에 삽입하기(youtube iframe_api) (0) | 2023.08.31 |
---|---|
JS Promise.all & Promise.race (0) | 2023.02.21 |
JS async & await (0) | 2023.02.20 |
JS Promise (0) | 2023.02.20 |
JavaScript - 동기(synchronous), 비동기(asynchronous) (0) | 2023.02.15 |