문자클래스
리터럴 문자를 대괄호로 감싸서 문자클래스를 만들수 있음.
문자 클래스는 그 안에 포함된 문자 중 어떤 것과도 일치.
/[abc]/ : a,b,c 모두와 일치
대괄호 안에 포함된 문자를 제외한 나머지 문자와 일치시키는 부정 문자 클래스 ^ (캐럿)
/[^abc]/ : a,b,c 를 제외한 모든 문자와 일치
문자 클래스 안에서 하이픈을 써서 문자 범위 표현
/[a-zA-Z0-9]/ : 알파벳 대소문자와 숫자 전체와 일치
/[a-zA-Z0-9-]/ : 알파벳 대소문자와 숫자 전체, 하이픈과 일치
정규 표현식에서 특히 자주 사용되는 문자 클래스는 특수 문자와 이스케이프 시퀀스로 짧게 쓸 수 있음.
문자 | 일치하는 문자 |
[...] | 대괄호 안에 있는 어떤 문자에든 일치 |
[^...] | 대괄호에 포함되지 않은 어떤 문자에든 일치 |
. | 뉴라인을 비롯한 유니코드 줄 끝 문자(line terminator) 를 제외한 모든 문자에 일치 |
\w | ASCII 단어 문자 전체에 일치 word 를 표현하며 '알파벳 + 숫자 + _' 중의 한 문자임을 의미한다. [a-zA-Z0-9_] 와 동등 |
\W | ASCII 단어가 아닌 문자 전체에 일치 non word를 표현하며 '알파벳 + 숫자 + _ '가 아닌 문자를 의미한다. [^a-zA-Z0-9_] 와 동등 |
\s | space 를 표현하며 유니코드 공백 문자 전체에 일치 |
\S | non space 를 표현하며 유니코드 공백 문자를 제외한 문자 전체에 일치 |
\d | digit 을 표현하며 ASCII 숫자 전체에 일치 [0-9] 와 동등 |
\D | non digit 을 표현하며 ASCII 숫자를 제외한 문자 전체에 일치 [^0-9] 와 동등 |
[\b] | 리터럴 백스페이스 문자 클래스 밖의 \b 와 구분해야 함. (문자 클래스 밖의 \b 는 word boundary를 표현, 문자와 공백사이 일치) |
/[\s\d]/ : 공백문자 또는 숫자 전체에 일치
반복
/\d\d/ : 숫자 두개에 일치
/\d\d\d\d/ : 숫자 네개에 일치
이런 식으로는 숫자가 몇개든 관계없이 찾는다거나, 글자 세 개 뒤에 숫자가 있어도 되고 없어도 된다는 식으로 찾는것은 불가능. 반복에 관련된 문법을 배워보자.
문자 | 의미 |
{n,m} | n번 이상, m번 이하 |
{n,} | n번 이상 |
{n} | 정확히 n번 |
? | 0번 또는 한번 {0,1} 과 동등 |
+ | 한번 이상 {1,} 과 동등 |
* | 0번 이상 {0,} 과 동등 |
/\d{2,4}/ : 2~4개의 숫자와 일치
/\w{3}\d?/ : 정확히 세글자와 뒤에 숫자 하나가 있어도 되고 없어도 됨.
/\s+java\s+/ : "java" 앞 뒤에 스페이스 하나 이상인 것과 일치
/[^(]*/ : ( 를 제외한 문자 0개 이상과 일치
* 와 ? 반복 문자를 사용할 때 주의점
=> 이 문자들은 앞의 패턴이 없어도 됨.
예를 들어 /a*/ 은 "bbbb" 에도 일치한다. "bbbb"에는 a가 0개 이상 존재하기 때문
대체/그룹/참조
문자 | 의미 |
| | 대체 : or 를 표현하며, 왼쪽 또는 오른쪽의 하위 표현식과 일치 |
(...) | 그룹 : 아이템을 그룹으로 묶어 * + ? | 등에서 한 단위로 사용하게 한다. 이 그룹에 일치하는 문자는 나중에 참조할 수 있음 |
(?:...) | 그룹만 : 아이템을 그룹으로 묶지만 이 그룹에 일치하는 문자를 기억하지는 않음 |
\n | n번째에 해당하는 그룹에 일치 그룹은 괄호 안에 존재하고 중첩 가능한 하위 표현식이다. 그룹 숫자는 왼쪽 괄호를 기준으로 할당되고 (?:...) 인 그룹에는 숫자가 할당되지 않음 |
대체
/ab|cd|ef/ : "ab", "cd", "ef" 에 모두 일치
/\d{3}|[a-z]{4}/ : 숫자 세 개 또는 소문자 네 개에 일치
/a|ab/ : "a" 또는 "ab" 에 일치 하는데 대체 옵션은 일치하는 것을 찾을 때까지 왼쪽에서 오른쪽으로 진행하가
일치하는 것을 찾으면 더 진행하지 않으므로 "ab" 에 적용하면 첫 번째 글자에만 일치
그룹
/java(script)?/ : "java" 뒤에 "script" 가 있거나 없을 때 일치
/(ab|cd)+|ef/ : "ab" 또는 "cd" 둘 중 하나가 한 번 이상 반복된 다음 "ef" 가 있는 문자열에 일치
참조
예를 들어 실수로 반복적으로 쓴 단어들을 찾고 싶을때
예문 :
He is is handsome
They are busy busy
I I am good
정규 표현식
/[ ]+(\w+)[ ]+\1/
의 결과는
is is
busy busy
I I
가 된다.
\1 은 정규 표현식에서 처음 사용한 하위 표현식을 가리키고 \2, \3 은 각각 두번째, 세번째로 사용한 하위표현식
'javascript' 카테고리의 다른 글
콜백 함수, promise, async await 그리고 동기와 비동기 (0) | 2022.03.30 |
---|---|
array, object 콘솔에서 출력할 때 신기한 점 - console lazy evaluation (0) | 2022.03.25 |
js sort 함수로 정렬해버리기 (0) | 2022.03.24 |
js this (javascript this)가 가리키는 3가지 (0) | 2022.03.24 |
for문 삼대장 - for ...of , for ...in, forEach (0) | 2022.03.10 |
댓글