regex - 문자 클래스
공백 문자 클래스
.
뉴 라인을 제외한 모든 문자들을 대표한다.
그렇다면 모든 공백 문자들은 어떻게 표현할 수 있을까?
const regex = /[\r\n\t\v\f]/
const regexClass = /\s
예시)
// [testcase]
// whitespcae => ( )
const regex = / ^\s+/
공백 문자가 아닌 모든 문자들은?
const regex = /[^\r\n\t\v\f]
const regexClass = /\S/
예시)
// [testcase]
// this is the => (this)
const regex = / ^\S+/
기타 문자 클래스
\s | whitespcae | [\r\n\t\v\f] |
---|---|---|
\S | not whitespace | [^\r\n\t\v\f] |
\d | digit | [0-9] |
\D | not digit | [^0-9] |
\w | word character | [0-9A-Za-z_] |
\W | not word character | [^0-9A-Za-z_] |
\b | word boundary | \b \w이전과 이후는 \W이거나 그\w |
\B | not word boundary | 경계 앞 뒤가 둘 다 \w이거나 그 반대 |
단어 경계 문자
-
\b, \B
는 문자를 소비하지 않는다- ^ and $와 비슷하게 어떤 문자를 매치하지는 않는다.
예시)
// [testcase]
// O That rose has a lovely stem! => (stem)
// X Look at that solar system!
const regex = /\bstem\b/
// [testcase]
// X That rose has a lovely stem!
// O Look at that solar system! => (stem)
const regex = /\Bstem\b/
// [testcase]
// X That rose has a lovely stem!
// X Look at that solar system!
// O Operationg systems are fascinationg => (stem)
const regex = /\Bstem\B/
\b 와 \W 차이점
- 경계 문자는 경계 문자를 매치에 포함 시키지 않는다.
- 즉 경계에 실제 문자가 없어도 경계가 동작함
- 처음이거나 끝 일 때도..
// [testcase]
// O stem stem stem => (stem) (stem) (stem)
const regex = /\bstem\b/
// [testcase]
// X stem
// O stem => ( stem )
// 문자를 포함하기에 결국 최소 6자리이상의 문자가 필요하게 된다.
const regex = /\Wstem\W/
다른 예제
// [testcase]
// O stem stem! stem => (stem stem! stem)
// O _i => (_i)
// X pennsylvanias 6-5000
// 문자로 시작하고 숫자가 아닌 문자열
const regex = /^\w.*\D$/
문제
위의 예제를 통해 이메일은 어떻게 정규식으로 처리할 수 있을까?
// kyh0703.atester@nate.ad.com
const emailRegex = /^[\w\.]+@[\w\.]+\.[\w]+$/;
주의 사항
정규식에서 단어
는 한글과 같은 2바이트 문자를 포함하지 않기 때문에 한글의 경계는 \b
로 처리할 수 없다.
한글의 경계를 판단하려면, 전후방 탐색으로 한글이 아닌 문자와의 경계를 판단하는 것이 좋다.
` /(?<=[^가-힣])대상문자(?=[^가-힣])/`
(자음과 모음까지 문자로 인식하려고 한다면, [^ㄱ-ㅎㅏ-ㅣ가-힣] 를 사용하면 된다)
댓글남기기