본문 바로가기

WEB개발/JS

[JS, JAVA] 정규식

: 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어입니다. 

 

^ 문자열의 시작
$ 문자열의 끝
. 임의의 한 문자
* 문자가 0번 이상 발생
+ 문자가 1번 이상 발생
? 문자가 0번 혹은 1번 발생
[ ]  문자의 집합 범위를 나타냄
[0-9] : 숫자 (0부터 9)
[a-z] : 알파벳 (a부터 z)

앞에 ^가 나타나면 not을 의미
{ }  횟수 또는 범위를 의미
( )  소괄호 안의 문자를 하나의 문자로 인식
|  or 조건
\ 확장 문자의 시작 
\b 단어의 경계
\B 단어가 아닌 것의 경계
\A 입력의 시작부분
\G 이전 매치의 끝
\Z 입력의 끝이지만 종결자가 있는 경우
\z 입력의 끝
\s 공백문자
\S 공백문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d [0-9]와 동일
\D 숫자를 제외한 모든 문자
(?:) 캡처(Capture)하지 않는 그룹

 

 

자주 사용하는 정규식모음

 

한글, 숫자, 영문 ^[가-힣0-9a-zA-Z]*$
이메일 \\w+@\\w+\\.\\w+(\\.\\w+)?
특수문자 [^가-힣0-9a-zA-Z]
휴대전화번호 ^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$
   
   
   
   
   
   

 

 

JAVA

 

find() : 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동(여러개가 매칭되는 경우 반복 실행가능)
find(int start) : start위치 이후부터 매칭검색을 수행
start() : 매칭되는 문자열 시작위치 반환
start(int group) : 지정된 그룹이 매칭되는 시작위치 반환
end() : 매칭되는  문자열 끝 다음 문자위치 반환
end(int group) : 지정되 그룹이 매칭되는 끝 다음 문자위치 반환

group() : 매칭된 부분을 반환
group(int group) : 매칭된 부분중 group번 그룹핑 매칭부분 반환
groupCount() : 패턴내 그룹핑한(괄호지정) 전체 갯수 반환
matches() : 패턴이 전체 문자열과 일치할 경우 true 반환

 

String line = "aaaaaaaaa1234bbbbbbbb";
String pattern = "(.*)([0-9]{3,})(.*)";

Pattern r = Pattern.compile(pattern);

Matcher m = r.matcher(line);
	      
while (m.find()) {
	System.out.println(m.group(0));
	System.out.println(m.group(1));
	System.out.println(m.group(2));
	System.out.println(m.group(3));
}

 

aaaaaaaaa1234bbbbbbbb  (0 전체)
aaaaaaaaa1   (1번째 그룹)
234  (2번째 그룹)
bbbbbbbb  (3번째 그룹)

 

 

String line = "wooyeo   n0111123333333333333333333333333333333333333333111111111111116@gmail.com";
String pattern = "[^가-힣0-9a-zA-Z]";

Pattern p = Pattern.compile(pattern);
	      
Matcher m = p.matcher(line);
	      
while(m.find()) {
	System.out.println(line.substring(m.start(), m.end()));
}

 

 
 

 

Javascript

 

exec() : 문자열에서 일치하는 부분을 탐색합니다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환합니다.

test() : 문자열에 일치하는 부분이 있는지 확인합니다. true 또는 false를 반환합니다.

match() : 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환합니다. 일치가 없으면 null을 반환합니다.

search() :  문자열에서 일치하는 부분을 탐색합니다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환합니다

 

 

플래그를 활용한 고급 탐색

   
d 부분 문자열 일치에 대해 인덱스 생성.
g 전역 탐색.
i 대소문자를 구분하지 않음.
m 여러 줄에 걸쳐 탐색.
s 개행 문자가 .과 일치함.
u "unicode", 패턴을 유니코드 코드 포인트의 시퀀스로 간주함.
y "접착" 탐색, 대상 문자열의 현재 위치에서 탐색을 시작함. sticky (en-US)를 참고하세요.

 

const regex = /hello/;
const str = 'hello world';
console.log(regex.test(str)); // true

 

const regex = /hello/;
const str = 'hello world';
const result = regex.exec(str);
console.log(result); // ["hello"]
console.log(result.index); // 0 (매치된 문자열의 시작 인덱스)
console.log(result.input); // "hello world" (원본 문자열)

 

const str = 'hello world hello';
const result = str.match(/hello/g); // 'g' 플래그로 모든 매치를 찾음
console.log(result); // ["hello", "hello"]

 

 

 

 


참조

https://hbase.tistory.com/160

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

'WEB개발 > JS' 카테고리의 다른 글

[JS] Deferred  (0) 2023.07.22
[JS] Async, Await, Fetch, PromiseAll  (0) 2023.03.06
[JS] JS의 비동기 작업 ( = promise)  (0) 2021.06.24
[JS] Engine, Event Loop  (0) 2021.06.24
[JS] input(inputmode, event, pattern)  (0) 2021.06.24