정규 표현식(이하 정규식)은 문자열에 나타나는 특정 문자 조합과 대응시키기 위해 사용되는 패턴이다.
즉, 특정 패턴의 문자열을 찾기 위한 표현식이다.
정규식 리터럴은 /(슬래쉬)로 감싸는 식으로 사용되며 단순 패턴을 찾기 위해선 다음과 같이 사용한다.
/abc/
와 같이 정규식 리터럴 안에 있는 문자열을 찾아낼때 사용한다.
이럴 경우 정확히 abc가 붙어있는 문자열만 찾아내며 abc가 탐색하는 문자열 내 여러개 있을 경우엔 최초 abc를 찾아냈을때 탐색은 중지된다.
전부 찾아내고 싶을 경우 후술할 플래그/abc/g
를 이용해 전부 찾아낼 수 있다.
검색에서 여러 조건을 설정하고 싶을때 특수문자를 사용하게 된다.
예를 들어/abc/
정규식 같은 경우에는 'abbbc'
라는 문자열에서 아무것도 찾아낼 수 없지만 특수문자 *
를 사용해 /ab*c/
를 사용할 경우에는 중간에 있는 b가 몇개가 되든 심지어 없더라도 찾아낼 수 있다.
이런 식으로 조건을 설정해 문자열 탐색을 좀 더 용이하게 만들어주는게 특수문자이다.
백슬래쉬를 사용하는 경우는 두가지로 나눌 수 있다.
바로 일반문자 앞에서 사용하는 경우와 특수문자 앞에서 사용하는 경우이다.
특수문자 앞에 올 경우
다른 특수문자 앞에 백슬래쉬가 오면 백슬래쉬 뒤에 있는 문자는 특별한 기능이 없는 일반문자 취급을 한다는 뜻이다.
/ab*c/
는 그냥 쓰일땐 'ab*c'
와 대응되지 않지만 백슬래쉬를 사용한 /ab\*c/
이 정규식과는 대응된다.
일반문자 앞에 올 경우
일반문자 앞에서 쓰이면 해당 문자는 일반문자가 아닌 특별한 취급을 한다는 뜻이다.
/a\dc/
는 'a\dc'
와 대응하는 표현식이 아니라 'a0c'
와 같이 중간에 숫자가 들어가는 문자열과 대응되게 되는데 이는 \d
가 숫자0~9에 대응하는 패턴이기 때문이다.
출처: https://curryyou.tistory.com/234 [카레유]
아래 패턴들을 이용하면 AND, OR, StartWith, EndWith 등의 다양한 조합을 만들 수 있다.
출처: https://curryyou.tistory.com/234 [카레유]
정규식을 이용하면 특정 문자 또는 패턴이 반복된 것도 대응가능하다.
기호 | 내용 |
---|---|
* | 이전에 적힌 문자가 0회 이상 반복되는 부분과 대응되며 {0,}과 같은 뜻이다. /ab*c/는 'abc'는 물론 'abbbc'와 'ac'와도 대응된다. |
+ | 이전에 적힌 문자가 1회 이상 반복되는 부분과 대응되며 {1,}과 같은 뜻이다. /ab+c/는 'abc'는 물론 'abbbc'와도 대응되자만 'ac'와는 대응되지 않는다. |
? | 이전에 적힌 문자가 있거나 없을때도 대응되게 한다. /a?bc?/는 'abdef'중 'ab'와도 대응되고 'bcdef'중 'bc'와도 대응되며 'bdefg'중 'b'와도 대응된다. |
{n} | 이전에 적힌 문자가 n번 나타났을때 대응한다. /abc{3}/의 경우에 'abc'에는 대응되지 않으며 /abcccccc/ 에서는 'abccc'까지만 대응한다. |
{n,m} | n과 m은 양의 정수이면서 n <= m 을 만족해야한다. 두 조건을 충족하면 앞 문자가 최소 n개, 최대 m개가 나타나는 부분과 대응한다. m자리를 비울 수 있는데, 비울 경우 m은 무한대로 취급한다. /abc{1,3}/의 경우 'abc'는 물론 'abccc'와도 대응한다. 'abcccccc'와 같이 c가 더 많아도 대응은 되나 'abccc'까지만 대응한다. |
플래그는 동시에 사용가능하다. ex) gi, gm 등
출처: https://curryyou.tistory.com/234 [카레유]
이외 다른 플래그들도 있지만, 필요할때 MDN을 찾아가자.
출처: https://curryyou.tistory.com/234 [카레유]
카레유님 블로그 - 정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코드) - https://curryyou.tistory.com/234
MDN - https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions