web/javascript

js 정규표현식 (regular expression)

blackbearwow 2022. 8. 1. 14:04

문법

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